【发布时间】:2012-07-08 11:05:54
【问题描述】:
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”引用(它是 Workable 类型)上调用的,因此方法调用将成功编译。然后,在 "w" 上调用 display() 方法,这会产生一个编译错误,表明未找到显示方法,这很明显,因为 Workable 不知道它。然后我们尝试调用 Object 类的方法,即 hashCode() ,这会产生成功的编译和执行。这怎么可能?有什么合乎逻辑的解释吗?
【问题讨论】:
-
Java 中的所有对象都是
Object。这可能就是为什么它无论如何都可以调用Object的方法。我认为有人会引用标准来正确回答问题。 -
在对象上将调用哪些方法取决于引用该对象的引用类型。在这里,Workable 类型引用是指对象,而 Workable 类型引用是如何知道 Object 类的方法的?
-
因为一切都是
Object(原始类型除外),所以引用的类型并不重要。我想这就是它的工作原理。
标签: java oop inheritance object interface