2012-01-02 10 views
1

私は2つのJavaクラスを持っています。第二のクラスFoobar方法を提供タイプキャスト後に「シンボルが見つかりません」

@Override public void onView(Object o) { 
    o = (Foo) o; 
    o.bar(); 
} 

:第一は、以下の方法を実装します。

今問題は、o.bar();呼び出しで "Can not find symbol"コンパイルエラーが発生することです。

私が間違っていることは何ですか、どのようにしてbarメソッドの呼び出しを行うことができますか? ありがとう

答えて

4

oObjectを指し、Fooではありません。他のクラスと同様に、FooはサブタイプObjectですが、oObjectへの参照のままです。

Foo f = (Foo) o; 
f.bar(); 

それはコンパイラはこの文でObjectクラスのメソッドを呼び出そうとし

+0

ありがとうございます。@ fgeが最初です。私はこの答えを受け入れます。 – kenda

+1

@kenda:実際、私は最初でした。 – SLaks

+4

しかし私はこれを少し簡単に見つけました。ごめんなさい – kenda

4

oObjectと宣言されています。

キャストされたインスタンスを入れてもそれは変わりません。変数のコンパイル時に存在するメソッドのみを呼び出すことができます。タイプです。

タイプFooの新しい変数を宣言する必要があります。

4

o = (Foo) o;

の変化、それはありますあなたがoをオブジェクトとして宣言しているので、o.bar();は利用できませんシンボルコンパイラエラーが見つかりません。このようなものが必要です((Foo) o).bar();

2

に動作します:

何が欲しいのに((Foo) o).bar();

関連する問題