而不是談論理論,讓我直接跳到這個例子來說明我想問什麼。類是如何考慮它的超類的方法,因爲它的接口方法的實現?
// The below piece of code is present in a single java file named "MyMain.java"
public class MyMain {
public static void main(String args[]) {
IFace iFace = new CSub();
iFace.method(); // This method essentially belongs to CSuper which doesn't implement IFace
}
}
interface IFace {
void method(); // Method in the interface
}
class CSuper {
public void method(){ // some method in this class, but not the one which implements the method of IFace
System.out.println("I'm not implementing IFace's method");
}
}
class CSub extends CSuper implements IFace {} // No method implemented in the class and yet no error.
顯然上面這段代碼的工作,因爲我是能夠得到輸出我不是在執行時實現IFACE的方法。
我的問題是,如何CSub
採取CSUper
的method()
爲IFace
接口method()
的實施。這似乎是繼承,但我需要一些具體的答案。還有,這是否有一個JLS參考可以通過繼承來闡明這是如何實現的?
而對於一個跟進的問題是,說有某種原因,爲什麼這個工作(正如我猜,這是繼承,但需要確保這件事),爲什麼不相同的代碼如果我執行以下任何一項更改,代碼段工作?
變化1:
class CSuper {
void method(){ // there is no access specifier, thus default(package)
System.out.println("I'm not implementing IFace's method");
}
}
變化2:
class CSuper {
protected void method(){ // access specifier is now protected
System.out.println("I'm not implementing IFace's method");
}
}
對於上述兩種變化我做什麼,我得到一個編譯錯誤說繼承的方法CSUper.method( )canoot隱藏IFace的公共抽象方法
class CSub extends CSuper implements IFace {}
這是爲什麼?由於它是繼承,所以protected
和默認訪問說明符應該工作,因爲所有的類都存在於同一個文件中。 method()
必須繼承到CSub
類,就像它在問題的第一部分中所做的一樣。任何人都可以突出這個案例嗎?
你讀過[this](http://docs.oracle.com/javase/tutorial/java/IandI/subclasses.html)嗎? –