类型转换后“找不到符号”

ken*_*nda 2 java casting

我有两个 Java 类。第一个实现以下方法:

@Override public void onView(Object o) {
    o = (Foo) o;
    o.bar();
}
Run Code Online (Sandbox Code Playgroud)

第二个类Foo提供bar方法。

现在的问题是我在o.bar();调用中收到“找不到符号”编译错误。

我做错了什么,我怎样才能实现 bar 方法的调用?谢谢

dan*_*uch 6

o = (Foo) o;

将其更改为:

Foo f = (Foo) o;
f.bar();
Run Code Online (Sandbox Code Playgroud)

它会工作


SLa*_*aks 5

o被声明为Object.

将铸造实例放入其中并不会改变这一点;您只能调用存在于变量编译时类型的方法。

您需要声明一个类型为 的新变量Foo


fge*_*fge 5

o是对 的引用Object,而不是Foo。强制转换有效,因为它Foo是 的子类型Object,就像任何其他类一样,但o仍然是对 的引用Object

你想要的是 ((Foo) o).bar();

  • 但我发现这更简单一些。对不起 (5认同)