多态的应用
- 以前对多态的概念总是感觉很晦涩,以及不太明白应用场景
非多态实现 人工喂养动物功能
public class Master {
public static void main(String[] args) {
Master master = new Master();
master.feed(new Dog());
master.feed(new Cat());
}
public void feed(Dog dog) {
dog.eat();
}
public void feed(Cat cat) {
cat.eat();
}
}
class Dog {
public void eat() {
System.out.println("狗在吃");
}
}
class Cat {
public void eat() {
System.out.println("猫在吃");
}
}
总结
由于master 直接维护各个动物,所有每次新增一种动物,就得新增一个对应动物的 feed(),代码为了满足业务,总需要在主类中修改.一旦业务复杂,就可能影响稳定性
多态实现 人工喂养动物功能
public class Master2 {
public static void main(String[] args) {
Master2 master2 = new Master2();
master2.feed(new Dog1());
master2.feed(new Cat1());
}
public void feed(Animal animal) {
animal.eat();
}
}
class Animal {
public void eat() {
System.out.println("动物在吃");
}
}
class Dog1 extends Animal {
@Override
public void eat() {
System.out.println("狗在吃");
}
}
class Cat1 extends Animal {
@Override
public void eat() {
System.out.println("猫在吃");
}
}
总结
由于master2 直接维护了 Animal,每次新增一种动物,只要动物继承了Animal,且重载了eat()方法,即可
多态的本质是 继承 + 子父类方法的重写,业务扩展时,影响最小,主类,父类都不用调整