可能重複:
Do interfaces inherit from Object class in java接口是「對象」嗎?
package inheritance;
class A{
public String display(){
return "This is A!";
}
}
interface Workable{
public String work();
}
class B extends A implements Workable{
public String work(){
return "B is working!";
}
}
public class TestInterfaceObject{
public static void main(String... args){
B obj=new B();
Workable w=obj;
//System.out.println(w.work());
//invoking work method on Workable type reference
System.out.println(w.display());
//invoking display method on Workable type reference
//System.out.println(w.hashCode());
// invoking Object's hashCode method on Workable type reference
}
}
正如我們所知,它可以調用的方法取決於參考變量上,我們要調用類型。在這裏,在代碼中,work()方法在「w」引用(這是可加工類型)上被調用,因此方法調用將成功編譯。然後,在「w」上調用display()方法,這會產生一個編譯錯誤,說明沒有找到顯示方法,因爲Workable不知道顯示方法。然後我們嘗試調用Object類的方法,即hashCode(),這會產生成功的編譯和執行。這怎麼可能?任何合理的解釋?
所有對象都是Java中的Object。這可能是爲什麼它可以調用Object的方法。我認爲有人會引用標準來正確回答這個問題。 – nhahtdh 2012-07-09 02:36:17
要在對象上調用哪些方法取決於引用該對象的引用的類型。這裏,Workable類型引用指的是對象,以及Work類型引用如何知道Object類的方法? – PrashantGupta 2012-07-09 02:52:18
因爲一切都是'對象'(除了原始類型),引用的類型並不重要。我想這就是它的工作原理。 – nhahtdh 2012-07-09 03:00:16