有关Java中对象类型转换的问题

ipk*_*iss 0 java object

我有一个关于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()方法的原因).

谢谢大家.

Boz*_*zho 7

Objectclass没有m()方法

这是解释.这些东西在编译时验证.想象一下:

Object o1 = new A();
Object o2 = new String();

void doSomething(Object o) {
    o.m(); // compilation error
}
Run Code Online (Sandbox Code Playgroud)

现在,Am(),但String没有.这是由编译错误指示的.如果Java没有静态类型,则此错误将在运行时出现.并且认为问题越早发现越好.