interface Ex11Interface {
void say(String s);
 }class Inner implements Ex11Interface {
public void say(String s) {
System.out.println(s + s);
}
public void run(){
System.out.println("run");
}
}class Test {
private class Inner implements Ex11Interface {
public void say(String s) {
System.out.println(s);
}
public void run(){
System.out.println("run");
}
}
Ex11Interface f() {
return new Inner();
}
}
public class EX11 {
public static void main(String[] args) {
Test t = new Test();
t.f().say("hi");
((Inner)t.f()).say("hello");
}
}
编译问什么能成功,而运行不行?

解决方案 »

  1.   


    Ex11Interface f() { 
        return new Inner(); 

    代码里的类是Test中的内部类.((Inner)t.f()).say("hello"); 中Inner是外部类Inner两者除了实现同一接口外,还有什么地方相同,根本就是不同的类怎么转换?
      

  2.   

    内部类,对外部不可见,你的外面的类根本就不知道有
    Inner这个类存在,那么你向这个类强制转换时,肯定会出现
    ClassCastException类转换异常。
      

  3.   

    顾名思义,内部类是要依附于外部类的,外部类的存在才能实现内部类的隐藏。编译是情况如何?你可以试着在cmd里编译下,没有编译外部类的前提下是无法编译内部类的,编译内部类,一定要通过外部类来引用。
      

  4.   

    在cmd中把那个外部类Inner去掉,编译时居然是成功的,而之前我在eclipse中编译都是有问题的。怎么回事?