你正面臨參考OOP的一部分的問題稱爲polymorphism
而是抽象類的我將使用一個接口,接口之間的差異的抽象類是接口只有方法的描述,一個抽象類可以也有方法和實現。
public interface InterfaceOfPigKiller {
void catchPig();
void cleanPig();
void killPig();
}
在抽象類中,我們實現兩個三個有效的方法,因爲我們認爲這些操作是每個未來的類型將繼承形成了我們班常見。
public abstract class AbstractPigKiller implements InterfaceOfPigKiller{
private Ping pig;
public void catchPig() {
//the logic of catching pigs.
}
public void cleanPig() {
// the logic of pig cleaning.
}
}
現在我們將創建兩個新類:
AnimalKiller - 負責對豬死亡的人。
AnimalSaver - 負責釋放豬的人。
public class AnimalKiller extends AbstractPigKiller {
public void killPig() {
// The killing operation
}
}
public class AnimalSaver extends AbstractPigKiller {
public void killPing() {
// The operation that will make pig free
}
}
因爲我們有我們的結構,讓我們看看它是如何工作的。
將執行序列
首先方法:
public void doTheRequiredOperation(InterfaceOfPigKiller killer) {
killer.catchPig();
killer.cleanPig();
killer.killPig();
}
正如我們在參數看,我們不使用類AnimalKiller
或AnimalSever
。而不是我們有接口。感謝這個操作,我們可以在任何實現使用過的接口的類上進行操作。
實施例1:
public void test() {
AnimalKiller aKiller = new AnimalKiller();// We create new instance of class AnimalKiller and assign to variable aKiller with is type of `AnimalKilleraKiller `
AnimalSaver aSaver = new AnimalSaver(); //
doTheRequiredOperation(aKiller);
doTheRequiredOperation(aSaver);
}
實施例2:
public void test() {
InterfaceOfPigKiller aKiller = new AnimalKiller();// We create new instance of class AnimalKiller and assign to variable aKiller with is type of `InterfaceOfPigKiller `
InterfaceOfPigKiller aSaver = new AnimalSaver(); //
doTheRequiredOperation(aKiller);
doTheRequiredOperation(aSaver);
}
代碼實施例1和2也同樣在方法doTheRequiredOperation
的範圍。區別在於,我們將類型分配給類型,而在第二個類型中,我們將類型分配給接口。
結論
我們不能創建抽象類或接口的新對象,但我們可以指定對象的接口或類類型。
爲什麼反對票:( –
我認爲這是一個素食主義者 – devdigital
你只打算殺死豬或其他動物的歡迎呢? – Bart