解释在java中访问内部类的方式?

这个问题在这里已经有了答案:

  • Java内部类和静态嵌套类23答案

  • 我为Inner类对象创建引用的方式就像在Outer类中访问static成员一样

    完全没有 - 因为你使用Outer一个实例来访问Inner的构造函数,这就像访问Outer类的实例成员,而不是它的static成员一样。 声明中的Inner类的名称使用外部类Outer的名称进行限定,以避免与顶级类的命名冲突。

    原因很容易理解: Inner是一个非静态的内部类,所以它需要引用Outer 。 它隐含地这样做,但引用必须传递给场景后面的构造器。 因此,你在Outer一个实例上调用Inner的构造函数。

    制作static类实例的语法类似于制作常规类实例的语法,除了嵌套类的名称必须以其外部类的名称作为前缀 - 即遵循static语法:

    class Outer {    
        static class Inner {       
    
        }    
    }
    
    public class Demo {
        public static void main(String args[]) {
            Outer.Inner inner = new Outer.Inner();    
    
        }    
    }
    

    你实际上是以一种非静态的方式访问一个内部类。 一个静态的内部类实际上是不同的 - 编译器会为程序员创建一个顶级类,这对程序员来说是隐藏的,然后类似于你为内部类发布的实例化方式。

    你必须这样声明,因为由于内部类是非静态的,它需要外部类的一个实例来创建内部类的一个实例。

    Outer o = new Outer(); 
    

    是外部类的必需实例。

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

    是内部类的实例所必需的。


    不确定你在问什么,但你的代码是有效的。

    如果你有一个Outer实例,那么你只能实例化Inner,所以你只需要在Outer实例的上下文中调用Inner的构造函数,因此

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

    作品,但是

    Inner i = new Outer.Inner(); //bad
    Inner i = Outer.new Inner(); //bad
    

    都试图以静态方式访问Inner,并且不会编译。

    如果你想在没有首先创建外部实例的情况下创建内部实例,那么内部需要是static

    链接地址: http://www.djcxy.com/p/92007.html

    上一篇: explain the way to access inner class in java?

    下一篇: No enclosing instance of type is accessible