多态的好处和弊端:
- 好处:提高程序的扩展性
具体体现:定义方法的时候,使用父类型作为参数,将来再使用的时候,使用具体的子类型参与操作 - 弊端:不能使用子类的特有功能
以图文和代码形式讲解:
CCom.Cnn包下的5个类:
AnimalDemo(测试类)
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 ?;多态形式的参数类型
/*
public void useAnimal1(Animal a) {
a.look1();
}
多态形式的参数类型下,look1属于子类Cat的独有方法,是不能调用的
*/
}
输出的结果:
猫吃猫粮
狗吃狗粮