多态的好处
原文:多态、多态的好处(扩展性)。简单修改。
提高了代码的维护性和可扩展性。
原代码,不易扩展:
//父类:动物类
abstract class Animal{
public abstract void eat();
}
//猫类
class Cat extends Animal{
public void eat(){
System.out.println("猫吃鱼");
}
}
//狗类
class Dog extends Animal{
public void eat(){
System.out.println("狗吃肉");
}
}
//针对动物操作的工具类
class AnimalTool{
//该类是工具类,最好把工具类的构造方法私有,防止别人创建该类的对象
private AnimalTool(){}
//调用猫的功能
public static void feedCat(Cat c){
c.eat();
}
//调用狗的功能
public static void feedDog(Dog d){
d.eat();
}
}
/*测试类*/
class PolymorphismTest{
public static void main(String[] args){
AnimalTool.feedCat(new Cat());
AnimalTool.feedDog(new Dog());
}
}
狗吃肉
猫吃鱼
改进后,采用多态,易于扩展:
//父类:动物类
abstract class Animal{
public abstract void eat();
}
//猫类
class Cat extends Animal{
public void eat(){
System.out.println("狗吃肉");
}
}
//狗类
class Dog extends Animal{
public void eat(){
System.out.println("猫吃鱼");
}
}
//针对动物操作的工具类
class AnimalTool{
private AnimalTool(){}
/*----------------改动----------------*/
public static void feedAnimal(Animal a){
a.eat();
}
}
/*测试类*/
class PolymorphismTest{
public static void main(String[] args){
AnimalTool.feedCat(new Cat());
AnimalTool.feedDog(new Dog());
}
}
狗吃肉
猫吃鱼
改进后,AnimalTool 只依赖于 Animal 类,只要是实现了 Animal 的子类,都可以被 feedAnimal 方法处理。同时,只依赖于 Animal 类的 AnimalTool 更加简洁,所依赖的类更少、更抽象,所以更加不容易出错。