代码理解--为什么要这么写?有什么用?怎么调用test()方法?

[code="java"]public class IC {
public C a(){
class B implements C{
public void [color=blue]test/color{
System.out.println("调用test()");
}
}
return new B();
}
[color=indigo]interface[/color] C{

}
public static void main(String[] args) {
    IC ic=new IC();
      ic.a();
}

}[/code]

这段代码为什么要这样写 问题问的很好

我的经验也不是太丰富 但是可以看书 着段代码是在实践内部类和接口的使用

接口本身是一个类 定义在类里面就是一个内部类

B实现了C new出来的B的实例同时也就是C的实例

C c = new B(); c可以调用的方法 只能是c里面声明过的方法 无法调用B里面扩展的方法

内部类里面方法的调用需要依赖于外部类的实例 a方法返回的是一个B类的对象

IC ic=new IC();

ic.a();
这段代码实行后 返回的是B的实例 而test方法是定义在B类里 所以楼上的代码
IC ic=new IC();

ic.a().test();
理论上是可以调用的

你的问题在哪里

你这段代码要想调用test,必须要在interface C里面声明test方法,然后调用ic.a().test()就可以了。
[code="java"]
1.public class IC {

2. public C a(){

3. class B implements C{

4. public void test(){

5. System.out.println("调用test()");

6. }

7. }

8. return new B();

9. }

10. interface C{

11. public void test();
12. }

13. public static void main(String[] args) {

14. IC ic=new IC();

15. ic.a().test();

16. }

17.}

[/code]

我觉得这个是考试的题目SCJP就经常这样搞,主要是考察内部类和接口的知识,实际编程肯定很少这样用,因为这样可读性实在是太差了!

还有,你的程序应该是这样的
[code="java"]public class IC {
public C a(){
class B implements C{
public void [color=blue]test/color{
System.out.println("调用test()");
}
}
return new B();
}
[color=indigo]interface[/color] C{

}
public static void main(String[] args) {
    IC ic=new IC();
      ic.a();
}

}[/code]