任何人都可以向我解释这句话的意思是Sup objRef;
。这个块代码不是错误,我理解如何实例化类。但是我不知道为什么在这个例子中他们(书籍所有者)在实例化类之后写了这个Sup objRef;
。
package basic.code;
class Sup{
void who(){
System.out.println("Who in Sup");
}
}
class Sup1 extends Sup{
void who(){
System.out.println("Who in Sup1");
}
}
class Sup2 extends Sup{
void who(){
System.out.println("Who in Sup2");
}
}
public class DynamicMethodDispatch {
public static void main(String[] args) {
// TODO Auto-generated method stub
Sup obj = new Sup();
Sup1 obj1 = new Sup1();
Sup2 obj2 = new Sup2();
Sup objRef;
objRef = obj;
objRef.who();
objRef = obj1;
objRef.who();
obj2.who();
}
}
答案 0 :(得分:1)
此代码
Sup objRef;
objRef = obj;
objRef.who();
objRef = obj1;
objRef.who();
证明了多态性的影响。
Sup objRef
创建一个Sup
类型的新变量。它不会将其设置为任何值。在下一行,objRef
设置为等于obj
。之后的行打印出“Who in Sup”。然后“神奇”发生。 objRef
设置为obj1
,其类型为Sup1
。下一行调用who()
并打印“Sup1中的Who”。为什么?虽然obj
类型为Sup
,但存储在其中的对象为Sup1
。
为什么这本书会显示
Sup objRef
呢?为什么不Sup objRef = obj;
我认为这没有任何实际意义。接下来的两个代码块看起来很整洁。