java - 为什么我们不能在(非静态)内部类(Java 16 之前)中有静态方法?

标签 java class static inner-classes

为什么我们不能在非静态内部类中拥有静态方法?

public class Foo {
    class Bar {
        static void method() {} // Compiler error
    }
}

如果我将内部类设为静态,它就可以工作。为什么?

public class Foo {
    static class Bar { // now static
        static void method() {}
    }
}

在 Java 16+ 中,这两个都是有效的。

最佳答案

因为内部类的实例隐式关联到其外部类的实例,所以它本身不能定义任何静态方法。由于静态嵌套类不能直接引用其封闭类中定义的实例变量或方法,它只能通过对象引用来使用它们,因此在静态嵌套类中声明静态方法是安全的。

关于java - 为什么我们不能在(非静态)内部类(Java 16 之前)中有静态方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/975134/

相关文章:

c++ - 将对象转换为 char* 以保存/加载

html - seo yoast 或 header.php 的静态首页?

java - bigquery.tabledata().insertAll 方法(Bigquery Java API)仅插入部分行

java - 依赖和组合之间的区别?

swift - 为什么我不能在 swift 中使用元类型作为结构的属性?

java - java类/异常表的最大大小

java - 这个未定义的方法/集合在这个静态初始化器中做了什么?

oop - 当状态不可变时,静态类是否合适?

java - Apache wicket 对于公共(public)站点来说是一种好的技术吗?

java - 保护PDF文件和PDFBox中的 "saveIncremental"