这意味着假设您具有:
Object x = "hello";
的类型的 变量 是
Object,但对象的类型是指是
String。这是变量类型,它决定了您可以执行的操作-因此您无法调用
// InvalidString 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)


