[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]