具体体现:定义方法的时候,使用父类型作为参数,将来再使用的时候,使用具体的子类型参与操作弊端:不能使用子类的特有功能
以图文和代码形式讲解:
CCom.Cnn包下的5个类:
package CCom.Cnn;public class AnimalDemo { public static void main(String[] args) { AnimalOperator a = new AnimalOperator(); Cat c = new Cat(); a.useAnimal(c);//注意方法的形参和实参类型是多态的,所以方法的话编译看左边,运行看右边 //a.useAnimal1(c);注意是不行的,仔细寻求为什么 Dog d = new Dog(); a.useAnimal(d);//编译看左边,运行看右边 }}
Animal(父类)package CCom.Cnn;public class Animal { public void eat(){ System.out.println("吃"); } }
Cat(子类)package CCom.Cnn;public class Cat extends Animal { @Override public void eat(){ System.out.println("猫吃猫粮"); } public void look1(){ System.out.println("猫爱上狗"); }}
Dog(子类)package CCom.Cnn;public class Dog extends Animal{ public void eat(){ System.out.println("狗吃狗粮"); }}
AnimalOperator(扩展类)package CCom.Cnn;public class AnimalOperator { public void useAnimal(Animal a) { a.eat(); }//Animal a=new ?;多态形式的参数类型 }
输出的结果:
猫吃猫粮
狗吃狗粮