我对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
}
}
Run Code Online (Sandbox Code Playgroud)
第一:引用变量typ的类型是Type,不是吗?!
那么,为了方法覆盖,打包有静态类型对象和动态类型类型的原因是什么?
第二:编译器是否有足够的信息来调用正确的equals()?
如果类类型没有重写的equals(),那么它可以调用Object.equals()方法.
在这种情况下类类具有,并且编译器知道它.
为什么这不能像重载一样早期绑定?为什么要把它留给JVM?
| 归档时间: |
|
| 查看次数: |
138 次 |
| 最近记录: |