'Sup objRef;`的解释

时间:2017-03-03 07:20:22

标签: java oop polymorphism

任何人都可以向我解释这句话的意思是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();
    }
}

1 个答案:

答案 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;

我认为这没有任何实际意义。接下来的两个代码块看起来很整洁。