2010-01-08 53 views
2

我想知道3件事情。class and interface

1:如果我已經在超類中實現了一個接口(有一個方法),那裏聲明該方法,然後我將該超類延伸到另一個類中。那麼我不必重新宣佈這種方法是對的?

2:但是,如果我不在超類中但在子類中聲明該方法,那麼我實例化超類。然後會發生什麼?它沒有包含實例的任何方法。

3:你可以在類中使用實現,然後不聲明該方法?也許它會被用作超類,只能用於其他類的擴展。然後,只需在子類中聲明該方法,還是必須在當前正在實現接口的類中聲明該方法?

回答

3
  1. 假設你的意思是 「重新實現」,而不是 「重複聲明」,這是正確的。

  2. 取決於類是否聲明爲抽象類。如果超類是抽象的,那麼子類或者需要實現它或者要被聲明爲抽象的。如果超類不是抽象的,那麼它將不能編譯。

  3. 如果您不想實施它,則聲明類抽象。

關於此主題的更多內容Sun tutorial about interfaces and inheritance

2

這被標記爲PHP和Java - 我會回答Java。

  1. 對,它會從超類繼承方法的實現。

  2. 如果超類仍然被聲明爲實現接口,那麼它將導致編譯時錯誤,所以這是不可能的。

  3. 不,正如我之前所說的,如果您實現了一個接口,那麼您必須實現或繼承該接口聲明的方法。唯一的例外是,如果該類是abstract,在這種情況下,您不需要爲接口方法提供實現(隱含地爲abstract)。抽象類不能被實例化。

+0

+1 Still:也許值得注意的是,第一個不適用於'private'成員函數和屬性。 – Franz 2010-01-08 17:11:37

+2

您不能在界面中使用私有方法。 – danben 2010-01-08 17:12:20

1

只是增加了什麼已經回答了第二個問題(用於Java):

正如在其他的答案(由@BalusC)提到的,如果你超告訴它實現了一個接口,沒有提供在接口中實現方法,則必須將超類標記爲抽象類。但由於它是一個抽象類,所以它是超類。

相關問題