我想知道为什么我可以直接从外部类型访问内部类,就像它是一个静态成员一样:

public class Hello {
    public class UnderHello
    {
        void runObject()
        {

        }
    }
}


所以当我到达UnderHello

public class SomeOtherClass {
    public void ClickOnMe()
    {
            Hello.UnderHello //this is shown by auto-complete
    }
}


我期待这样的事情:

public class SomeOtherClass {
    public void ClickOnMe()
    {
            Hello world = new Hello();
            world.UnderHello // after creating an instance, then UnderHello should now be seen by auto-complete
    }
}


如果UnderHello是一个static类,这是有道理的,因为我可以直接从Class本身而不是创建外部类的实例来到达类的静态成员。但这是内在阶级。

我很困惑。

现在有人可以帮我吗?

谢谢。

最佳答案

Hello.UnderHello是正确的,因为那是类的名称。

但是,这并不意味着您实际上可以创建该内部类的实例而无需外部类的实例。

 Hello.UnderHello x = new Hello.UnderHello(); // this will not work
                   // at least not from everywhere



  如果UnderHello是静态类,那将是有道理的,因为我可以直接从Class本身而不是创建外部类的实例来访问类的静态成员。


如果可以的话,类定义本身总是静态的。您不需要实例来引用它(类定义也不会随着外部实例而改变)。

如果UnderHello是字段或方法,则可以,除非声明为static,否则您将需要一个实例来访问它。

关于java - Class.inner类还是Instance.inner类?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4385791/

10-12 04:53