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

2 に答える 2

4

間違ったポイントでキャストしているだけです。あなたが欲しい:

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

例のように静的メソッドで参照する必要あるわけではありません...thismain

(また、どのタイプなどもJavaの命名規則に準拠していないことに注意してください...)

于 2012-05-08T14:29:23.827 に答える
1

試す

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

ほら、あなたthisはそれを持っていません(cMyClass)i、それはただi。だからあなたはそれを手に入れithis.i)そしてあなたが望むものにそれをキャストします。

于 2012-05-08T14:29:25.727 に答える