我有两个Java类。第一个实现以下方法:
@Override public void onView(Object o) {
o = (Foo) o;
o.bar();
}
第二个班级Foo
提供bar
方法。
现在的问题是我在o.bar();
电话上收到“找不到符号”编译错误。
我做错了什么,我怎么能实现bar方法的调用? 感谢
答案 0 :(得分:4)
o
被声明为Object
。
将一个铸造实例放入其中不会改变它;您只能调用变量的编译时类型中存在的方法。
您需要声明一个Foo
类型的新变量。
答案 1 :(得分:4)
您的o
是对Object
的引用,而不是Foo
。由于Foo
是Object
的子类型,其他任何类都可以投放,但o
仍然是对Object
的引用。
你想要的是((Foo) o).bar();
答案 2 :(得分:4)
o = (Foo) o;
将其更改为:
Foo f = (Foo) o;
f.bar();
它会起作用
答案 3 :(得分:2)
编译器尝试使用此语句o.bar();
调用Object类中的方法,因为您已将o
声明为Object,但在此处不可用导致找不到符号编译器错误。你需要这样的东西((Foo) o).bar();