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

时间:2010-10-08 14:05:10

标签: java object

我对Java中的类型转换有一个问题如下:

假设我有一个班级:

class A { public void m() }

现在我做了:

A a1 = new A();     // (1) 
a1.m();             // (2) 
Object o = new A(); // (3) 
o.m();              // (4) 

我们可以将第(1)行称为:a1包含新对象A()的内存地址(在Heap中创建)。所以第(2)行绝对可以。

我们也可以将第(3)行说成:o包含新对象A()的内存地址(也是在Heap中创建的)。但是行(4)显然无法编译,因为Object类没有m()方法。

但为什么a1包含对象A()的地址,并且“可以看到”m()方法;虽然o也包含对象A()的地址,但它“看不到”m()方法?

还有其他解释吗? (Object类没有m()方法的原因除外)。

谢谢大家。

1 个答案:

答案 0 :(得分:7)

  

Object类没有m()方法

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

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

void doSomething(Object o) {
    o.m(); // compilation error
}

现在,Am(),但String却没有。这由编译错误表示。如果Java不是statically typed,则此错误将在运行时出现。并且认为发现问题越早越好。