运行时多态存在的三个必要条件:
1.要有继承
2.要有重写
3.父类引用指向子类对象
public class InstanceOfTest { public static void main(String[] args) { Cat c = new Cat("黑猫警长","黑色"); Dog d = new Dog("大黄","黄色"); //System.out.println(c instanceof Cat);//result:true //System.out.println(d instanceof Dog);//result:true //System.out.println(c instanceof Animal);//result:true //System.out.println(d instanceof Animal);//result:true //System.out.println(c instanceof Dog);错误:不兼容的类型Cat无法转换为Dog //System.out.println(c.name);//result:黑猫警长 //System.out.println(d.name);//大黄 InstanceOfTest t1 = new InstanceOfTest(); t1.info(c); t1.getScream(c);//猫叫 } public void info(Animal a) { System.out.println(a.name); //System.out.println(a.catColor);//result:找不到符号 变量catColor 类型为Animal的变量a if (a instanceof Cat) { Cat c1 = (Cat)a; System.out.println(c1.catColor); //result:黑色 } } public void getScream(Animal a) { a.scream(); } } class Animal { String name; Animal(String name) { this.name = name; } public void scream() { System.out.println("动物叫"); } } class Cat extends Animal { String catColor; Cat(String name,String catColor) {//错误:需要标识符 super (name); this.catColor = catColor; } public void scream() { System.out.println("猫叫"); } } class Dog extends Animal { String dogColor; Dog(String name,String dogColor) {//错误:需要标识符 super (name); this.dogColor = dogColor; } public void scream() { System.out.println("狗叫"); } } /* 1.子类中要使用父类的super构造方法,必须要在父类中先设定好构造方法。 2.要直接使用子类的成员变量,则必须转换成子类的对象。父类引用指向子类对象只能访问其父类的成员变量。 3.多态是由方法来实现的,要直接使用子类的方法无需转换成子类的对象,方法是和实际所传的对象绑定的。 */ /* 运行时多态存在的三个必要条件: 1.要有继承 2.要有重写 3.父类引用指向子类对象 */