2010-03-03 112 views
1

在我看來,這兩個interfaceabstract function十分相似,接口和抽象的公共職能

它就像一個令一些方法必須實現,

有啥區別?

+0

Duplicates http://stackoverflow.com/questions/1221512/abstract-class-and-interface-class – 2010-03-03 12:38:59

+0

另一個重複http://stackoverflow.com/questions/761194/interface-vs-abstract-class-general- oo – 2010-03-03 12:40:04

+0

對不起,這是一個**錯字**,我的意思是'抽象函數' – user198729 2010-03-03 12:42:42

回答

6

Have a look at this.

報價:(通過e-SATIS很好Explantion)

接口

接口是一個合同:這傢伙寫的接口說:「嘿,我接受這種方式「,而使用界面的人說」好的,我寫的課程就是這樣看的「。

接口是一個空殼,只有方法的簽名(名稱/ params /返回類型)。這些方法不包含任何內容。界面不能做任何事情。這只是一種模式。

E.G(僞代碼):

// I say all motor vehicles should look like that : 
interface MotorVehicle 
{ 
    void run(); 

    int getFuel(); 
} 

// my team mate complies and write vehicle looking that way 
class Car implements MotoVehicle 
{ 

    int fuel; 

    void run() 
    { 
     print("Wrroooooooom"); 
    } 


    int getFuel() 
    { 
     return this.fuel; 
    } 
} 

實現接口消耗很少的CPU,因爲它不是一個班,只是一堆名字,爲此並沒有昂貴的查詢做。這很重要,比如在嵌入式設備中。

抽象類

抽象類,不同的接口,是類。使用起來比較昂貴,因爲在從它們繼承時需要進行查找。

抽象類看起來很像接口,但它們有更多的東西:你可以爲它們定義一個行爲。這更多的是關於一個人說「這些班級應該看起來像這樣,他們有共同之處,所以填寫空白!」。

e.g:

// I say all motor vehicles should look like that : 
abstract class MotorVehicle 
{ 

    int fuel; 

    // they ALL have fuel, so why let others implement that ? 
    // let's make it for everybody 
    int getFuel() 
    { 
     return this.fuel; 
    } 

    // that can be very different, force them to provide their 
    // implementation 
    abstract void run(); 


} 

// my team mate complies and write vehicle looking that way 
class Car extends MotorVehicule 
{ 
    void run() 
    { 
     print("Wrroooooooom"); 
    } 
} 

通過:https://stackoverflow.com/users/9951/e-satis

1

在沒有多重繼承的語言,不同的是非常重要的。在php或Java術語中,一個類可能會實現多個接口,但只能從單個父類繼承,這可能是抽象的。

例如在C++中,區別變得不那麼重要。