Java中的引用变量到底是什么?它与其他变量有何不同?

5 java oop polymorphism inheritance

我一直在研究Java中的继承,作者写了一条语句“确定要执行哪个版本的重写方法的是所引用对象的类型(而不是引用变量的类型)。” 这句话令人非常困惑。

Col*_*ica 9

这本书所指的是多态,更具体地说是通过动态调度

简而言之,请想象以下类:

public class Person {

    public Person() {
    }

    public void introduceYourself() {
    } 

}

public class Texan extends Person {

    public Texan() {
    }

    public void introduceYourself() {
        System.out.printLn("Howdy y'all!");
    } 

}

public class NewYorker extends Person {

    public NewYorker() {
    }

    public void introduceYourself() {
        System.out.printLn("Yo. You got a problem with that?");
    } 

}
Run Code Online (Sandbox Code Playgroud)

现在,让我们创建一个type的引用变量Person

Person myBFF;
Run Code Online (Sandbox Code Playgroud)

让我们实例化他

myBFF = new NewYorker();
Run Code Online (Sandbox Code Playgroud)

我们问他自我介绍

myBFF.introduceYourself();
Run Code Online (Sandbox Code Playgroud)

打印:

呦。你对此有看法?

现在,让我们将BFF更改为德克萨斯州。

myBFF = new Texan();
Run Code Online (Sandbox Code Playgroud)

让我们再次拨打同一行,并要求我们的BFF介绍自己。

myBFF.introduceYourself();
Run Code Online (Sandbox Code Playgroud)

打印:

大家好!

在每种情况下,您使用的参考变量都是Person类型。在每种情况下,变量的实例分别是NewYorkerTexan实例类型确定调用了describeYourself ()的哪个版本。