黑马程序员技术交流社区

标题: 找不到符号 [打印本页]

作者: 匿名    时间: 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