JAVA多态学习2
2017-06-30 21:32
197 查看
好啦,这里紧接着上次没说的向下转型,请读者结合上次讨论的向上转型的样例一起探讨(事实上本次代码也有加上,放心)。
我们这里希望从向下转型会出现的两种基本情况进行探讨
ps:
instanceof:
1.用instanceof来測试它所指向的对象是否是某个类。
2.instanceof在对象类型的强制转换,先推断是否是某种类型,是的话再强制转换成改类型。
我们这里希望从向下转型会出现的两种基本情况进行探讨
package downcasting; //动物类Animal父类 class Animal{ String name; int age; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } //动物会叫 public void cry(){ System.out.println("不知道怎么叫"); } //动物吃东西 public void eat(){ System.out.println("不知道吃什么"); } } //创建Dog子类并extends继承Animal父类及覆盖cry方法 class Dog extends Animal{ //狗叫 public void cry(){ //覆盖父类方法 System.out.println("汪汪叫"); } //狗吃东西 public void eat(){ //覆盖父类方法 System.out.println("狗爱吃骨头"); } public void bite(){ System.out.println("狗会咬人..."); } } public class Downcasting { public static void main(String[] args) { // TODO 自己主动生成的方法存根 Animal g1=new Dog(); //向上转型 g1.cry(); g1.eat(); /* * 情况一:假设父类引用的对象假设引用的是指向的子类对象, * 那么在向下转型的过程中是安全的。也就是编译执行是不会出错误的 */ Dog dog=(Dog)g1; //向下转型,编译和执行皆不会出错 dog.cry(); dog.eat(); Animal g2=new Animal(); /* *情况二:假设父类引用的对象是父类本身,那么在向下转型的过程中是不安全的。 *编译不会出错,可是执行时会出现java.lang.ClassCastException错误。 *它能够使用instanceof来避免出错此类错误。 * */ /* *错误例如以下: Exception in thread "main" java.lang.ClassCastException: * downchange.Animal cannot be cast to downchange.Dog at downchange.Downchange.main(Downchange.java:62) Dog dog1=(Dog)g2; dog1.cry(); dog1.eat(); */ if(g2 instanceof Dog){ Dog dog1=(Dog)g2; dog1.cry(); dog1.eat(); } else if(g2 instanceof Animal){ System.out.println("g2是Animal的实例");} //Dog g3=new Animal(); //不存在从Animal转换到Dog } }
ps:
instanceof:
1.用instanceof来測试它所指向的对象是否是某个类。
2.instanceof在对象类型的强制转换,先推断是否是某种类型,是的话再强制转换成改类型。
相关文章推荐
- 学习java第三天---------------封装、继承和多态
- 黑马程序员—java基础学习--抽象类(abstract)、接口(interface)、多态
- java基础学习面向对象之多态 五-10
- java学习之路 之 高级类特性1-多态、重写练习题1
- java多态学习
- 黑马程序员 java学习笔记——面向对象3:多态(含内部类)
- Java基础学习之final和多态及类型转换
- thinkinginjava学习笔记07_多态
- 学习笔记_毕向东 Java_继承_抽象类_接口_多态 2014.7.13
- java学习第八天之抽象。继承和多态
- JAVA学习笔记(五)继承时的构造方法、多态、接口、汉诺塔
- 学习笔记_毕向东 Java_多态 2014.7.14
- 【Java学习笔记】继承和多态
- Java学习第四课 类的继承与多态特性
- Java学习笔记——类与对象(封装、继承与多态)
- JAVA多态学习4
- Java学习笔记(一)----封装 继承 多态 抽象 接口
- JAVA学习笔记04封装,继承,多态
- Java多态学习笔记
- Java学习第9天(1):面向对象-多态-简介