2012-05-08 11 views
0
interface iMyInterface { 
    public iMethod1(); 
} 

public class cMyClass implements iMyInterface{ 
    public iMethod1() { 
     System.out.println("From Method1"); 
    } 
    protected iMethod2() { 
     System.out.println("From Method2"); 
    } 
} 

class AppMain 
{ 
    iMyInterface i=new cMyClass(); 
    public static void main(){ 
    i.iMethod1(); 
    ((cMyClass)i).iMethod2(); 
    } 
} 

この農産物出力メソッド1からキャストは、この演算子を使用して、インターフェイスを持つクラスを実装

を次のように

インタフェースオブジェクトは、そのクラス

が、私の質問にキャストされた方法2

から

becozこの次のケースではキャストできません

class AppMain 
{ 
    iMyInterface i=new cMyClass(); 
    public static void main(){  
    i.iMethod1(); 
    this.((cMyClass)i).iMethod2(); 
    } 
} 

Eclipse IDEに次のエラーが表示されます。 トークン "。"に構文エラーがあり、このトークンの後に識別子が必要です。

これは私が同じフィールドにアクセスするいずれの方法でも を理解していません。

答えて

4

あなたは間違った点でキャストしています。あなたが欲しい:あなたはあなたの例ではmainのような静的メソッドで参照するthisを持っていること

((cMyClass) this.i).iMethod2(); 

ない...

は(また、あなたの種類のいずれなどは、Javaの命名規則に従っていないことに注意してください...)

1

あなたが見

((cMyClass)(this.i)).iMethod2(); 

を試してみてください、あなたのthisには(cMyClass)iが含まれていません。ちょうどiです。だからあなたはそれを得るithis.i)とあなたが欲しいものにキャストします。

関連する問題