如果您有一個名爲Car的抽象超類,並且您有它的各種子類,並且沒有實現的抽象方法,爲什麼還要抽象類引用變量。即抽象類和非抽象超類
Car myCar=new Honda();
在Car類中只有沒有實現的抽象方法,所以它沒用沒有權利?
如果您有一個名爲Car的抽象超類,並且您有它的各種子類,並且沒有實現的抽象方法,爲什麼還要抽象類引用變量。即抽象類和非抽象超類
Car myCar=new Honda();
在Car類中只有沒有實現的抽象方法,所以它沒用沒有權利?
這根本沒用。它允許您編寫依賴於對象Car
的代碼,而無需瞭解有關Car
的具體類型的任何信息。
public abstract class Car {
public abstract void tootHorn();
public abstract void swerve();
. . .
}
public class Driver {
private Car car;
public Driver(Car car) {
this.car = car;
}
public void dealWithDanger() {
car.tootHorn();
car.swerve();
}
. . .
}
在張貼上面的代碼中,Car
可以很容易地已經一個interface
。儘管如此,可以直接在Car
類中實現一些依賴於子類指定的抽象方法(尚未指定)行爲的方法。
抽象類的關鍵點是你從來沒有抽象類本身的實例;代碼只能創建一些具體子類的實例。儘管如此,許多應用程序邏輯可以寫成獨立於對象的特定類別。
抽象部分阻止您創建一個Car對象是這樣的:
Car car = new Car();
這是沒有意義的創造不僅僅是一輛汽車。
不是真的。汽車是本田之上的抽象。所以在將來,你可以換掉本田而不用擔心大量修改代碼。就我而言,隨着家庭的成長,我從本田思域轉向斯巴魯傲虎。猜猜看,我不需要重新學習駕駛,因爲「駕駛API」保持不變,我已經知道如何駕駛汽車。
這您可能感興趣的:什麼 - 做 - 它 - 平均到程序對一個接口(http://stackoverflow.com/q/383947/1393766)。 – Pshemo