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