public class PolyTest {
Dog dog =(Dog)a;//向下类型转换。也就是父类转换为子类,必须使用强制转换。
}
class Animal {
public void sing() {
System.out.println("animal");
}
}
class Dog extends Animal {
public void sing() {
System.out.println("dog");
}
}
class Cat extends Animal {
public void sing() {
System.out.println("cat");
}
}
public static void main(String[] args) {
Cat cat = new Cat();
Animal animal = cat;//向上类型转换。子类转换成父类,不需要显式转换。
animal.sing();//这里输出为cat
Dog dog =(Dog)a;//向下类型转换。也就是父类转换为子类,必须使用强制转换。
dog.sing();//这里输出为dog
Animal animal2 = new Animal();
Dog d = (Dog)animal2;//这里编译通过,运行报错,Animal cannot be cast to Dog.因为animal这个引用指向的是Animal这个对象,前面已经说过,多态可以说是父类的引用指向子类的对象,指向哪个对象就可以转换成哪个类型,
d.sing();
Animal b = new Cat();
Dog c = (Dog)b;
c.sing();//这里编译时没有错误,运行时会报错,Cat cannot be cast to Dog.子类不能转换成子类。
}}
class Animal {
public void sing() {
System.out.println("animal");
}
}
class Dog extends Animal {
public void sing() {
System.out.println("dog");
}
}
class Cat extends Animal {
public void sing() {
System.out.println("cat");
}
}