我有一個接口和三個類。在類B
中,我定義了一個名爲printHello
的方法。然後,在類Test
中,我聲明新對象並將其分配給一個新的B.爲什麼我不能使用接口中未定義的方法?
問題是,代碼不能編譯,因爲我得到一個錯誤,指出「方法printHello()未定義類型IHello」。這讓我感到困惑,因爲我能夠將一個IHello
類型的對象分配給一個新的B
,所以即使該接口沒有它們,該對象也不能使用B
的方法嗎?
爲了解決這個問題,我知道我可以在IHello
接口中聲明一個名爲printHello
的方法,或者我可以聲明類型B的對象。我還能做些什麼來解決這個問題嗎?
接口IHello
public interface IHello {
void hello();
}
A類
public class A implements IHello{
public void hello(){
System.out.println("hello");
}
}
B類
public class B extends A {
public void printHello(){
this.hello();
}
}
類檢驗
public class Test {
public static IHello b;
public static void main(String[] args) {
b = new B();
b.printHello(); //The method printHello() is undefined for type IHello
}
}
***變量***(不是*對象*)的*類型*是什麼?這是編譯器所看到的。順便提一下,這裏已經提到了數十億次。 –
變量的類型是IHello,但是因爲它被分配到一個'B',我想了解爲什麼我不能使用'B'的方法。 –
編譯器沒有查看實際的對象類型。它正在看你宣佈的類型 - IHello。在某些情況下,編譯器可能不知道實際的對象類型,因爲它可能僅在運行時纔可用。 –