2015-12-25 27 views
0

我讀了很多關於Stack的鏈接,如this question,我決定問。界面和抽象方法在使用上類似嗎?

當我在Java中創建一個抽象形狀類,我認爲這個類必須有一個方法來getArea()

我認爲有兩種方式。

public abstract class Shape 
{ 
    public abstract double getArea(); 
} 

當我從Shape創建擴展類時,我重新定義了擴展類中的getArea()。

那麼我可以用這樣的Interface創建這個層次嗎?

public interface Contain 
{ 
    public double getArea(); 
} 

和創建類這樣的:

public abstract class Shape implements Contain 
{ 
... 
} 

然後,對於擴展的類形的重新定義的getArea()。

我有點困惑。

在使用中決定界面和抽象方法的最佳方法是什麼?

+2

我的問題:這個網站上真的需要問幾次這個問題。認真。 –

+1

請把你的照片從這個鏈接發到[本網站上許多類似的許多問題](https://www.google.com/webhp?的SourceID =鉻瞬間&離子= 1&espv = 2&即= UTF-8#Q = java的+接口+ VS +抽象+類+站點:http:%2F%2Fstackoverflow.com%2F)。谷歌估計大約有4000個重複項目,但這可能有點過高估計,但仍然必須高達數百或數千。 –

+0

很多,只是很多人。 – elia

回答

1

以圓滿的方式,是的他們的用法是「相似的」。抽象的類別interface之間的比較更是如此。

接口是一組預定義的方法存根,可以在一個類中實現並且可以在沒有繼承的情況下重寫。

抽象類是一個定義了值和方法的類,它不能被實例化並且用於在沒有其他非抽象類的情況下繼承/擴展。

例如,你可以有一個叫Animals與被完全寫入,並與變量和數據成員定義以及方法抽象類,但你必須先擴展這個Animals類,說... Lion類是不抽象以便能夠實例化和使用這些方法和數據成員。

隨着interfaces,我將使用無線電的一個例子。你可以有一個名爲RadioSystem的接口,它具有方法存根,用於改變頻率,從FM切換到AM,反之亦然等,然後將其實施到另一個類中,例如... CarRadio,以便它已經具有所有方法存根並定義了預定義的功能,那麼作爲程序員,您只需要以最適合實現的類的方式編寫這些方法。

0

我會用一個抽象方法來決定一個接口和抽象類,通過思考該類是否有任何基礎實現。這些基本實現只能使用抽象類,所以我會選擇一個抽象類。否則,我會選擇一個接口。它取決於你想要建模的域。