java_使用多态的好处(例子)


  学java的都知道java的三大特性:封装、继承、多态。

  之前对多态了解的不是特别清楚,现在权当是写个列子加深印象,说明适当的时候使用多态可以达到的好处。

 

  比如,现在在动物园,饲养员的话需要喂养很多动物,正常情况下的话,对饲养员来说需要一个一个去喂养,写成程序的方法如下:

  

public class Person {
    
    //饲养员喂猫
    public void feed(Cat cat){
        System.out.println("喂猫");
    }

    //饲养员喂狗
    public void feed(Dog dog){
        System.out.println("喂狗");
    }
    
    //饲养员喂养其他动物……
    
}

  

  再把具体的动物形象出来

 

public class Cat {

    public void eat(){
        System.out.println("猫吃饭");
    }

}

 

public class Dog {

    public void eat(){
        System.out.println("狗吃饭");
    }
}

 

  这种情况下,饲养员需要针对每种动物去专门喂养,写成程序如下

 

public class Feed {
    public static void main(String[] args) {
        Cat cat = new Cat();
        Dog dog = new Dog();
        Person person = new Person();
        //饲养员喂猫
        person.feed(cat);
        //饲养员喂狗
        person.feed(dog);
    }
}

 

  如果动物很多,饲养员就会很累,需要不同动物的feed方法,程序就需要new 很多具体动物出来,写出来也比较繁琐,这时候就体现出多态的好处。

  我们只需要在每个动物的食盆前面加上自动喂食的机器,饲养员只需要在房间里按下按钮,食物就自动倒在动物的食盆里,所以,饲养员就不需要专门到每个动物前面喂食了,所以我们只需要修改饲养员的喂养方法,让饲养员只有一个喂养动物的方法

 

public class Person {

    //饲养员喂食
    public void feed(Animal animal){
        System.out.println("喂" + animal.getName() + "吃饭");
    }
}

  

  我们再把具体的动物写出来

public class Animal {

    private String name;

    public String getName() {
        return name;
    }

    public Animal setName(String name) {
        this.name = name;
        return this;
    }

    public void eat(Animal animal) {

        System.out.println(animal.getName() + "在吃饭");
    }

}
public class Cat extends Animal {

private String name;

public String getName() {
return name;
}

public Cat setName(String name) {
this.name = name;
return this;
}

public Cat(String name) {
this.name = name;
System.out.println(this.name + "食盆倒满");
}

}
public class Dog extends Animal {

private String name;

public String getName() {
return name;
}

public Dog setName(String name) {
this.name = name;
return this;
}

public Dog(String name) {
this.name = name;
System.out.println(this.getName() + "食盆倒满");
}
}

 

  这样,饲养员喂养的时候,只需要调用喂养的方法就可以了,不需要知道专门的动物

 

public class Feed {
public static void main(String[] args) {
Person person = new Person();
Animal animal_1 = new Cat("猫");
//喂猫
person.feed(animal_1);
Animal animal_2 = new Dog("狗");
//喂狗
person.feed(animal_2);
}
}

 

 

 

  这样写出来,饲养员就会省事省时省力很多。

  我们可以把不同子类的对象都当做父类类型来对待,可以屏蔽不同子类对象之间的实现差异,从而写出通过的代码达到通用编程,以适应需求的不断变化。


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM