父类引用子类对象,我们称这个过程为向上转型,属于自动类型转换。
向上转型后的父类引用变量只能调用它编译类型的方法,不能调用它运行时类型的方法。这时,我们就需要进行类型的强制转换,我们称之为向下转型!
在向下转型过程中,必须将引用变量转成真实的子类类型(运行时类型)否则会出现类型转换异常ClassCastException。
package learn;
public class Polym {
public static void main(String[] args) {
// 动物叫
Animal ani = new Animal();
animalShout(ani);
// 狗叫
Animal dog = new Dog(); // 向上转型(自动转型)
animalShout(dog);
Dog dog1 = (Dog) dog; // 向下转型(强制转型)
animalShout(dog1);
}
static void animalShout(Animal a) {
a.shout();
}
}
class Animal {
public void shout() {
System.out.println("Aoao~");
}
}
class Dog extends Animal {
public void shout() {
System.out.println("woof~");
}
}