向上转型和向下转型

例如我现在有两个类,他们之间是继承的关系:

class Animal {
    void eat () {
        System.out.println("Animal eat...");
    }
}

class Dog extends Animal {

    @Override
    void eat() {
        System.out.println("Dog eat");
    }
    
    void bark() {
        System.out.println("Dog bark");
    }
    
}

通俗地讲,向上转型就是把子类的对象转化为父类的对象,如:

Animal animal = new Dog();

但是注意,向上转型后,父类只能访问与子类共有的方法,如以下代码就会出现编译错误:

animal.bark(); //出错

向下转型则需要强制类型转换:

Animal animal = new Dog();

Dog dog = (Dog) animal;

总的来说,向上转型总是安全的,向下转型则未必,可能会发生ClassCastException.

原文地址:https://www.cnblogs.com/stonefeng/p/5666013.html