向上转型和向下转型

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判断是否可以转型为某一个子类,来实现子类中共有得父类方法,使代码可读性提高,更简洁

posted @ 2022-07-06 21:26  syC3  阅读(43)  评论(0)    收藏  举报