一尘不染

Java-参考变量

java

“重要的是要理解,引用变量的类型(而不是它所引用的对象的类型)决定了可以访问哪些成员。”

那句话你到底是什么意思?这仅限于继承概念吗?JVM如何处理它?


阅读 313

收藏
2020-12-03

共1个答案

一尘不染

这意味着假设您具有:

Object x = "hello";

的类型的 变量Object,但对象的类型是指是String。这是变量类型,它决定了您可以执行的操作-因此您无法调用

// Invalid
String y = x.toUpperCase();

编译器仅知道您在上调用方法Object,其中不包括toUpperCase。同样,重载方法仅针对您所知道的方法进行解析:

public class Superclass
{
    public void foo(Object x) {}
}

public class Subclass extends Superclass
{
    public void foo(String y) {}
}
...
Subclass x = new Subclass();
Superclass y = x;

x.foo("hello"); // Calls Subclass.foo(String)
y.foo("hello"); // Calls Superclass.foo(Object)
2020-12-03