向上转型(upcasting) 、向下转型(downcasting).
总结:
1。父类引用指向子类对象,而子类引用不能指向父类对象。
2。把子类对象直接赋给父类引用叫upcasting向上转型,向上转型不用强制转换。
3。把指向子类对象的父类引用赋给子类引用叫向下转型(downcasting),要强制转换。
4。向上转型时,子类单独定义的方法会丢失
向上转型的好处,减少重复代码,使代码变得简洁。提高系统扩展性。
5。向下转型注意事项
向下转型的前提是父类对象指向的是子类对象(也就是说,在向下转型之前,它得先向上转型)
不安全的向下转型:如果父类引用的对象是父类本身,那么在向下转型的过程中是不安全的,编译不会出错,但是运行时会出现java.lang.ClassCastException错误
public void eat(Animal a){
if(a instanceof Dog){
Dog d = (Dog)a;
d.eat();
d.run();//狗有一个跑的方法
}
if(a instanceof Cat){
Cat c = (Cat)a;
c.eat();
System.out.println("我也想跑,但是不会"); //猫会抱怨
}
a.eat();//其他动物只会吃
}