我有一个关于Java中的类型转换的问题如下:
假设我有一个班级:
class A { public void m() }
Run Code Online (Sandbox Code Playgroud)
现在我做:
A a1 = new A(); // (1)
a1.m(); // (2)
Object o = new A(); // (3)
o.m(); // (4)
Run Code Online (Sandbox Code Playgroud)
我们可以说line(1)为:a1包含新对象的内存地址A()(在Heap中创建).所以第(2)行绝对可以.
我们还可以将第(3)行说成:o包含新对象的内存地址A()(也在Heap中创建).但是line(4)显然无法编译,因为Object类没有m()方法.
但为什么a1包含对象的地址A(),它"可以看到"该m()方法; 同时o还包含对象的地址A(),但它"看不到"的m()方法?
还有其他解释吗?(除了Object班级没有这个m()方法的原因).
谢谢大家.
Objectclass没有m()方法
这是该解释.这些东西在编译时验证.想象一下:
Object o1 = new A();
Object o2 = new String();
void doSomething(Object o) {
o.m(); // compilation error
}
Run Code Online (Sandbox Code Playgroud)
现在,A有m(),但String没有.这是由编译错误指示的.如果Java没有静态类型,则此错误将在运行时出现.并且认为问题越早发现越好.
| 归档时间: |
|
| 查看次数: |
190 次 |
| 最近记录: |