黑马程序员技术交流社区
标题:
找不到符号
[打印本页]
作者:
匿名
时间:
2011-8-28 13:15
你在main方法中定义了一个内部类Inner并实现了A 这个接口并复写了接口A中的fun1()方法。接下来通过
new Outer().callInner(new Inner()); 这句调用了一个方法callnner()并将内部类的实例传递过去,而你的方法:
public void callInner([color=Red]Inner[/color] in) {
in.fun1();
}
Innerl在这里就根本不可见,即访问不到,而将Inner该为A就可访问到,因为你的Inner类实现了接口A,通过对象的多态性A就可以接受Inner类的实例。
你的这句:private Outer out = new Outer();会使栈内存溢出,不知写这句是干什么压根都没有用到定义的out对象,运行后报告的错误为:
Exception in thread "main" java.lang.StackOverflowError
回答完毕。。。
作者:
黑马李刚
时间:
2011-8-28 14:26
原因在于你的内部类Inner定义在类Outer的局部位置,public void callInner(Inner in) 无法访问到Inner.
经试验,将内部类定义在成员位置,并将各函数改为静态,则能正常运行:
代码如下:
interface A
{
void fun1();
}
class Outer
{
static class Inner implements A
{
public void fun1()
{
System.out.println("implement for fun1");
}
}
public static void main(String[] args)
{
new Outer().callInner(new Inner());
}
public static void callInner(Inner in)
{
in.fun1();
}
}
[
本帖最后由 troyli1986 于 2011-08-28 14:41 编辑
]
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2