Java内部类和静态嵌套类

标签 java inner-classes static-classes

Java 中内部类和静态嵌套类的主要区别是什么?设计/实现是否在选择其中一个方面发挥作用?

最佳答案

来自Java Tutorial :

Nested classes are divided into two categories: static and non-static. Nested classes that are declared static are simply called static nested classes. Non-static nested classes are called inner classes.

使用封闭类名访问静态嵌套类:

OuterClass.StaticNestedClass

例如,要为静态嵌套类创建对象,请使用以下语法:

OuterClass.StaticNestedClass nestedObject = new OuterClass.StaticNestedClass();

作为内部类实例的对象存在于外部类的实例中。考虑以下类:

class OuterClass {
    ...
    class InnerClass {
        ...
    }
}

InnerClass 的实例只能存在于 OuterClass 的实例中,并且可以直接访问其封闭实例的方法和字段。

要实例化内部类,必须先实例化外部类。然后,使用以下语法在外部对象中创建内部对象:

OuterClass outerObject = new OuterClass()
OuterClass.InnerClass innerObject = outerObject.new InnerClass();

参见:Java Tutorial - Nested Classes

为了完整起见,还有一个类似 inner class without an enclosing instance 的东西。 :

class A {
  int t() { return 1; }
  static A a =  new A() { int t() { return 2; } };
}

这里,new A() { ... } 是一个在静态上下文中定义的内部类,并且没有封闭实例。

关于Java内部类和静态嵌套类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59327529/

相关文章:

java - 如何在连续的 for 循环之间传递变量值?

java - 追加对象现有文件

python - 从 cmd 导入 Cmd,(不适用于 MyPrompt 类)

c++ - 代码意外编译失败。为什么?

c# - 这种强制不变性的模式有什么缺点?

静态类范围内的python嵌套字典理解: variable not defined

java.util.logging 如何覆盖特定包的处理程序日志级别?

java - java 9下运行时添加jar到classpath

java - 将 instanceof 与来自不同类的静态内部类一起使用

language-agnostic - 我曾经读到静态类非常困难,甚至无法调试。这是真的吗?为什么?