向上转型和向下转型
Animal a = new Cat(); Cat c = (Cat) a; c.eat(); //输出 猫吃鱼 Dog d = (Dog) a; d.eat(); // 报错 : java.lang.ClassCastException Animal a1 = new Animal(); Cat c1 = (Cat) a1; c1.eat(); // 报错 : java.lang.ClassCastException
第一次强转时,由于a得对象就是Cat所以可以强转成功,其实就是先向上转型(Animal a = new Cat())再向下转型(Cat c=(Cat)a),在需要向下转型时,需要注意这一点。
第二次时,引用为Dog所以会报错
作用:
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();//其他动物只会吃
}
eat(new Cat());
eat(new Cat());
eat(new Dog());
将子类得对象传到父类引用作为参数得方法中(向上转型),再由instanceOf判断是否可以转型为某一个子类,来实现子类中共有得父类方法,使代码可读性提高,更简洁

浙公网安备 33010602011771号