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

因为接口对象被强制转换为该类

但我的问题是我不能在以下情况下投

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();

并不是说您必须像示例中那样在this静态方法中引用main...

(另请注意,您的类型等都不遵循 Java 命名约定......)

于 2012-05-08T14:29:23.827 回答
1

尝试

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

你看,你的里面this没有(cMyClass)i,它只有一个i。所以你得到那个i( this.i) 并将它转换成你想要的任何东西。

于 2012-05-08T14:29:25.727 回答