貓和狗兩個(gè)類(lèi)
class Cat {
}
class Dog {
}
假如主人要喂的話(huà)次和,在沒(méi)有多態(tài)的情況下,主人要實(shí)現(xiàn)兩個(gè)方法渤刃,分別針對(duì)貓和狗來(lái)喂
class Master {
? ? void feed(Dog dog) {}
? ? void feed(Cat cat) {}
}
這樣的話(huà)纤泵,有多少類(lèi)動(dòng)物就需要寫(xiě)多少個(gè)喂的方法
有多態(tài)的話(huà),Master可以這樣實(shí)現(xiàn)
讓貓和狗都繼承一個(gè)Animal的父類(lèi)
class Animal {
? ? void eat() {}
}
class Dog extends Animal {
? ??void eat() {}
}
class Cat extends Animal {
? ??void eat() {}
}
class Master {
? ? // 這里只需要實(shí)現(xiàn)一個(gè)參數(shù)為Animal的喂方法滤钱,只要傳入的參數(shù)都遵循Animal的規(guī)則(必須實(shí)現(xiàn)那些方法)。就可以在不知道具體實(shí)現(xiàn)類(lèi)(Dog或Cat)的情況下進(jìn)行操作(feed)脑题。那就可以只針對(duì)父類(lèi)(或者接口)進(jìn)行編程件缸,針對(duì)父類(lèi)(或接口)來(lái)編程的話(huà),就算來(lái)更多不同類(lèi)型的動(dòng)物叔遂,代碼都可以不用變化他炊,只需要繼承Animal類(lèi)争剿,并實(shí)現(xiàn)具體的子類(lèi)就可以了。
? ? void feed(Animal animal) {
? ? ? ? animal.eat();
????}
}
public class Test {
? ? public static void main() {
? ? ? ? Master master = new Master();
? ? ? ? master.feed(new Dog());
? ? ? ? master.feed(new Cat());
????}
}