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

class Demon
{
        public void func()
        {
                        new Inner();
        }
        class Inner
        {
                        void Inner()
                        {
                                        System.out.println("*****************");
                        }
        }
        public static void main (String [] args)
        {
                        Demo d=new Demo();
                        new Inner();//不可以。。。主函数是静态的,如果要访问Inner需要被static修饰。
        }
}
这个是不能编译成功的,但是把内部类放在class Demon的外部然后在进行编译是可以通过的。为什么?

4 个回复

倒序浏览
非静态内部类对象必须寄存在外部类的对象里面,而外部类对象则不一定有非静态内部类对象寄存在其中
,所以如果存在一个非静态内部类,这一定存在一个被他寄存的外部类对象,反之则不一定,
所以外部类对象访问非静态内部类成员时候,可能非静态普通内部类的对象根本不存在,反之则一定存在
回复 使用道具 举报
张志阳 发表于 2012-4-5 13:14
非静态内部类对象必须寄存在外部类的对象里面,而外部类对象则不一定有非静态内部类对象寄存在其中
,所以 ...

不是很了解啊 。。。
回复 使用道具 举报
本帖最后由 安浦鑫 于 2012-4-5 14:59 编辑

  1. class Demo
  2. {
  3.             
  4.         public void func()
  5.         {
  6.                         new Inner();
  7.         }
  8.         class Inner
  9.         {
  10.                         Inner()
  11.                         {
  12.                                         System.out.println("-------");
  13.                         }
  14.                         void Inner()
  15.                         {
  16.                                         System.out.println("*****************");
  17.                         }
  18.         }
  19.         public static void main (String [] args)
  20.         {
  21.                                                
  22.                         Demo.Inner d=new Demo().new Inner();
  23.                         d.Inner();
  24.                         new Demo().new Inner();
  25.                      
  26.         }
  27. }
复制代码
我改了下你的代码 这个是能通过的 运行结果是
-------
*****************
-------
外部成员访问内部类需要有内部类的实体,由于内部类要依附于外部类存在,所以对他的创建需要带上外部类名 向你这样直接创建,是不被编译器所允许的。//以上叙述基于内部类为非静态
回复 使用道具 举报
安浦鑫 发表于 2012-4-5 14:56
我改了下你的代码 这个是能通过的 运行结果是
-------
*****************

哦。谢了 问题解决。呵呵。。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马