【发布时间】:2017-06-26 13:09:36
【问题描述】:
我对 Java 中引用变量的动态/静态类型和动态方法解析的概念有点困惑。
考虑:
public class Types {
@Override
public boolean equals(Object obj){
System.out.println("in class Types equals()");
return false;//Shut-up compiler!
}
public static void main(String[] args){
Object typ = new Types();
typ.equals("Hi");//can do this as String is a subclass of Object
}
}
首先:引用变量typ的类型是Types,不是吗?!
那么 typ 具有 静态类型 对象和 动态类型 用于方法覆盖的类型的原因是什么?
第二:编译器没有足够的信息来调用正确的equals()吗?
如果类 Types 没有重写的 equals(),那么它可以调用 Object.equals() 方法。
在这种情况下,Types 类可以,编译器知道。
为什么不能像重载这样的早期绑定?为什么要交给 JVM?
【问题讨论】:
-
抱歉,静态拼写错误。
-
引用变量
typ是静态类型Object和运行时类型Types。不,编译器只知道typ是Object。
标签: java overriding