是否可以使用非静态成员类型而不与封闭类的实例相关联?

时间:2019-05-24 11:46:48

标签: java inner-classes

是否可以使用非静态成员类型而不与封闭类的实例相关联?

例如

class Outer {    
    class Inner {       

    }    
}

public class Demo {
    public static void main(String args[]) {

        Outer o = new Outer();
        Outer.Inner inner = o.new Inner();    

    }    
}

Outer.Inner inner = o.new Inner()中,Outer.Inner是否使用Inner而不与封闭类的实例相关联?

还有其他示例可以使用非静态成员类型而不与封闭类的实例相关联吗?

谢谢

1 个答案:

答案 0 :(得分:2)

  

Outer.Inner是否使用Inner而不与封闭类的实例相关联?

从某种意义上讲,是的,因为Outer.Inner指的是类型。而且,您不需要实例即可使用 types

我认为您错误地认为Outer.Inner不起作用,因为存在由Inner的不同实例创建的数量众多的称为Outer的不同类型。您可能以为,如果我有两个不同的Outero1o2实例,它们将创建不同的Inner types 。 >

但这完全不是事实。您完全可以做这样的事情:

Outer o1 = new Outer();
Outer o2 = new Outer();
Outer.Inner inner1 = o1.new Inner();
Outer.Inner inner2 = o2.new Inner();
inner2 = inner1;

所以Outer.Inner只是一种类型。恰好是这种类型的实例需要Outer的实例才能创建。