學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);
}
}
這樣寫出來,飼養員就會省事省時省力很多。
我們可以把不同子類的對象都當做父類類型來對待,可以屏蔽不同子類對象之間的實現差異,從而寫出通過的代碼達到通用編程,以適應需求的不斷變化。