多态的好处

原文:多态、多态的好处(扩展性)。简单修改。

提高了代码的维护性和可扩展性。

原代码,不易扩展:

//父类:动物类
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 更加简洁,所依赖的类更少、更抽象,所以更加不容易出错。

posted @ 2022-08-22 17:07  Higurashi-kagome  阅读(28)  评论(0编辑  收藏  举报