2009-12-24 54 views
3

我有兩個有關Java接口的問題。 1)如果一個類碰巧實現了接口I的所有接口方法,而沒有聲明自己實現它們,它仍然可以用作I型變量的輸入嗎? 2)實現接口I的類A的子類是否繼承了該接口的一致性,還是應該聲明自己實現了I?在Java中的接口實現的繼承

回答

16

如果一個類實現所有 接口I, 的接口方法,而沒有宣佈自己爲 實現它們,可它仍然可以 用作送入 我類型的變量?

不,你所描述的更類似於duck typing

請問A級這 實現接口我繼承了 符合該接口,或 應該也宣佈自己作爲 實現我的一個子類?

假設你的意思是:

public class A implements I { /* ... */ } 

public class B extends A { /* ... */ } 

在這種情況下,B實現I

+0

怎麼樣: public interface I {public void hey(); } public class X {public void hey(){/*...*/} public class A extends X implements I {} 這是行不通的嗎? – Dois 2014-12-04 17:10:41

2
  1. 它意味着「它能滿足Liskov替代原則嗎?」,答案是「否」。
  2. B類符合它的父類,不需要重新聲明該接口。

回答這些問題的最好方法是嘗試 - 試試看看。

+1

+1只是爲了「爲什麼你不問之前嘗試它?」點 - 值得傳送更多的東西。 – delfuego 2009-12-24 19:51:35

0
  1. 不,接口必須明確實施。
  2. 由基類實現的接口通過擴展總是由派生類實現。
+0

作爲推論,實現接口的抽象類可能會將實現推遲到具體的子類:http://java.sun.com/docs/books/tutorial/java/IandI/abstract.html – trashgod 2009-12-24 21:48:28