Java中的参考变量究竟是什么?它与其他变量有何不同?

时间:2017-11-18 02:50:40

标签: java oop inheritance polymorphism

我一直在研究Java中的继承,并且编写器声明“它是被引用的对象的类型(不是引用变量的类型),它决定了将被执行的被覆盖方法的版本。” 这句话非常令人困惑。

4 个答案:

答案 0 :(得分:6)

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

简而言之,想象下面的课程:

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?");
    } 

}

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

Person myBFF;

让我们实例化他

myBFF = new NewYorker();

让我们让他自我介绍

myBFF.introduceYourself();

打印:

  

哟。你有问题吗?

现在,让我们将您的BFF改为德克萨斯人。

myBFF = new Texan();

让我们再次呼叫同一行,并要求我们的BFF自我介绍。

myBFF.introduceYourself();

打印:

  你好,你们好!

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

答案 1 :(得分:3)

引用变量是您在左侧指定的类型(包含引用类型的变量)。作者所指的是当右手边不同时。考虑

Object a = new Foo(); 
System.out.println(a.toString());

如果Foo覆盖Object.toString()(即Foo提供public String toString())方法那么,则为Foo被调用的toString(不是Object)。另请参阅Java教程中的Overriding and Hiding Methods

答案 2 :(得分:1)

参考变量如下所示:

Coordinate cords; //Cords is the ref. var

内部引用变量是计算机内存中存储该对象属性的地址。由于我们没有实例化(实际上是一个对象)上述绳索对象的地址是null

引用变量将地址保存到内存的保留部分。

cords = new Coordinate(0.0,0.0,0.0);

现在计算机的RAM内部是一个保留空间,它包含三个浮动类型变量。在实例化时,引用变量保存地址。那么我们可以用Java中的地址做什么呢?

没什么用。 Java内存地址没用,你看不到它们(虽然它们看起来像0xFFFFFFF)

要获得直观表示,请点击here

答案 3 :(得分:1)

参考变量是表示/解释变量的术语 仅指一种类型,尚未实例化。 同样,在实例化之后,它的类型将取决于引用变量将如何实例化或由哪个类实例化。

从罗伯特哥伦比亚的上述例子说

   Person myBFF;

或者以 Brenann 为例

   Coordinate cords; //Cords is the ref. var

在这两种情况下,myBFF 和 cords 仅分别引用 Person 或 Coordinate 类。请注意,它们尚未实例化!