我有三個班。爲什麼不能在子類中看到父類的方法?
A類
public class A {
}
B類
public class B extends A {
public void hello(){
System.out.println("hello");
}
}
C類
public class C extends B {
}
類檢驗
public class Test {
public static void main(String[] args) {
A a = new C();
a.hello(); // The method hello() is undefined for type A
}
}
上面的代碼將無法編譯,因爲它報告讀取錯誤「的方法你好()是不確定的A型」
我的問題是,因爲「A」是一個C
對象,爲什麼不a.hello()
使用在B
的父類中的hello()
方法?
如果我添加一個hello方法A
類,最後才上面的代碼使用hello()
從B級,可是爲什麼我要加hello()
到A
級才能使用的方法,從B
類?
您的變量'a'可能包含對'A'的另一個子類(如'D')的引用,它沒有提供方法'hello()' - 編譯器根本不知道。因此,編譯器只允許調用爲類「A」定義的方法。 –
和'Object o = new String(「123」);'不能使用'o.length();'然而,如果你將o賦給一個String,那麼你可以使用String的方法。 –
這聽起來像你可能希望你定義'B'通過「擴展」它的功能來改變'A'的定義嗎?那是你在想什麼?因爲,如果是這樣,那是不正確的。通過定義'B'和'C',你對'A'什麼都不做。相反,「B」和「C」將「A」的定義「複製」或「繼承」爲起點,然後您在其中定義的任何內容都可以訪問「A」的定義。 – dantiston