public class Polymorphysim{ public static void main(String[] args){ Animal dog = new Dog(); Cat cat = (Dog)dog; } } class Animal{ public void sing(){ System.out.println("Animal is singing"); } } class Dog extends Animal{ public void sing(){ System.out.println("Dog is singing"); } } class Cat extends Animal{ public void sing(){ System.out.println("Cat is singing"); } } 先看第一段代码:
关于多态,总的来说就是父类的引用可以指向子类的对象; 以上程序输出为child iss singing ;
(1)若将子类Child类的sing()方法注释掉,则输出结果为:parent is singing;
(2) 若将父类parent类sing()方法注释掉,则 D:/java_pro_jdk>javac Polymorphysim.javPolymorphysim.java:4: 找不到符号符号: 方法 sing()位置: 类 Parent parent.sing(); ^1 错误
再看一段程序:
public class Polymorphysim{ public static void main(String[] args){ Animal dog = new Dog(); Cat cat = (Dog)dog; } } class Animal{ public void sing(){ System.out.println("Animal is singing"); } } class Dog extends Animal{ public void sing(){ System.out.println("Dog is singing"); } } class Cat extends Animal{ public void sing(){ System.out.println("Cat is singing"); } }
这段代码是关于强制类型转换的,编译结果为:
D:/java_pro_jdk>javac Polymorphysim.javaPolymorphysim.java:4: 不兼容的类型找到: Dog需要: Cat Cat cat = (Dog)dog; ^
可以解释为:必须转换为实际所指向的类型的对象,即实际new的是什么对象,就转换成什么对象;
指向谁就调用谁的方法;