A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

©   /  2011-8-28 12:01  /  1556 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

黑马网友  发表于 2011-8-28 13:15:45
楼主
你在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

                回答完毕。。。

评分

参与人数 1技术分 +1 收起 理由
wangfayin + 1 谢谢回答!

查看全部评分

回复 使用道具 举报
原因在于你的内部类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 编辑 ]

评分

参与人数 1技术分 +2 收起 理由
wangfayin + 2 不错哦!

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马