问题描述
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();}} 问题补充:是的可以 先 谢谢你!
解决方案
这段代码为什么要这样写 问题问的很好我的经验也不是太丰富 但是可以看书 着段代码是在实践内部类和接口的使用接口本身是一个类 定义在类里面就是一个内部类 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(); 理论上是可以调用的
解决方案二:
还有,你的程序应该是这样的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();}}
解决方案三:
我觉得这个是考试的题目SCJP就经常这样搞,主要是考察内部类和接口的知识,实际编程肯定很少这样用,因为这样可读性实在是太差了!
解决方案四:
你这段代码要想调用test,必须要在interface C里面声明test方法,然后调用ic.a().test()就可以了。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.}
解决方案五:
你的问题在哪里