向上转型与向下转型

直接贴代码

public class Animal {

    int id = 111;		//父类的id
    public void run(){
        System.out.println("动物在跑");
    }
    
}
public class Cat extends Animal {

    int id = 333;			//子类的id
    String name = "猫";		//子类独有的变量

    public void run(){		//子类覆盖重写父类的方法
        System.out.println("猫在跑");
    }

    public void eatFish(){		//子类独有的方法
        System.out.println("猫吃鱼");
    }
}
public class test {
    public static void main(String[] args) {
        Animal animal = new Cat(); //父类引用指向子类对象
        animal.run();       //父类引用调用子类的方法,使父类的行为更像儿子
//        animal.eatFish();    //错误,向上转型无法调用子类的特有内容
        System.out.println(animal.id);     // Animal中的 111


        System.out.println("----------------------");
        /*
        想要调用cat的独有方法,需要向下转型
         */
        Cat cat1 = (Cat) animal;
        System.out.println(cat1.id);    //333
        System.out.println(cat1.name);  //猫
        cat1.eatFish(); //猫吃鱼
    }
}

结果如下:
向上转型与向下转型_第1张图片

多态的作用(摘自百度百科):

把不同的子类对象都当作父类来看,可以屏蔽不同子类对象之间的差异,写出通用的代码,做出通用的编程,以适应需求的不断变化。
赋值之后,父类型的引用就可以根据当前赋值给它的子对象的特性以不同的方式运作。也就是说,父亲的行为像儿子,而不是儿子的行为像父亲
(这应该在说向上转型,即父类引用指向子类对象,很有意思)
向上转型与向下转型_第2张图片

你可能感兴趣的:(向上转型与向下转型)