2012-09-18 70 views
1

我们知道静态上下文不能引用任何类型的任何实例,但main方法会发生什么,下面的代码示例如何编译没有问题:从它的封闭类的静态方法中实例化一个内部类

public class MyOuter 
{ 
    public static void main(String[] args) 
    { 
     MyOuter mo = new MyOuter(); // gotta get an instance! 
     MyOuter.MyInner inner = mo.new MyInner(); 
     inner.seeOuter(); 

     //Or 

     MyOuter.MyInner inner = new MyOuter().new MyInner(); 
    } 

    class MyInner 
    { 
     public void seeOuter(){} 
    } 
} 

是不是禁止从它的封闭类中的静态上下文中实例化内部类?

回答

5

是不是禁止从它的封闭类中的静态上下文中实例化内部类?

没有 - 它是被禁止实例化一个内部类没有封闭类的一个实例。在你的情况,你有封闭类的一个实例:

new MyOuter().new MyInner(); 

这是完全的罚款。

你通常可以蒙混过关,而不从一个实例方法指定的封装类的唯一原因是,它相当于

// Within an instance method 
this.new MyInner(); 

详情请参阅section 15.9.2 of the JLS。你的构造函数调用是一个“限定类实例创建表达式”。

相关问题