2013-11-05 213 views
1

如果您有一個名爲Car的抽象超類,並且您有它的各種子類,並且沒有實現的抽象方法,爲什麼還要抽象類引用變量。即抽象類和非抽象超類

Car myCar=new Honda(); 

在Car類中只有沒有實現的抽象方法,所以它沒用沒有權利?

+0

這您可能感興趣的:什麼 - 做 - 它 - 平均到程序對一個接口(http://stackoverflow.com/q/383947/1393766)。 – Pshemo

回答

5

這根本沒用。它允許您編寫依賴於對象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類中實現一些依賴於子類指定的抽象方法(尚未指定)行爲的方法。

抽象類的關鍵點是你從來沒有抽象類本身的實例;代碼只能創建一些具體子類的實例。儘管如此,許多應用程序邏輯可以寫成獨立於對象的特定類別。

0

抽象部分阻止您創建一個Car對象是這樣的:

Car car = new Car(); 

這是沒有意義的創造不僅僅是一輛汽車。

0

不是真的。汽車是本田之上的抽象。所以在將來,你可以換掉本田而不用擔心大量修改代碼。就我而言,隨着家庭的成長,我從本田思域轉向斯巴魯傲虎。猜猜看,我不需要重新學習駕駛,因爲「駕駛API」保持不變,我已經知道如何駕駛汽車。