你要么像kihero所说的那样混淆了,要么你用一个具有方法的类(它只是一个碰巧具有静态方法的类)混淆了这个概念。static
abstract
static
静态嵌套类只是一个嵌套类,不需要其封闭类的实例。如果您熟悉C++,则C++中的所有类都是“静态”类。在Java中,嵌套类在默认情况下不是静态的(这种非静态变体也称为“内部类”),这意味着它们需要一个外部类的实例,它们在幕后的隐藏字段中跟踪该实例 - 但这允许内部类引用其关联的封闭类的字段。
public class Outer {
public class Inner { }
public static class StaticNested { }
public void method () {
// non-static methods can instantiate static and non-static nested classes
Inner i = new Inner(); // 'this' is the implied enclosing instance
StaticNested s = new StaticNested();
}
public static void staticMethod () {
Inner i = new Inner(); // <-- ERROR! there's no enclosing instance, so cant do this
StaticNested s = new StaticNested(); // ok: no enclosing instance needed
// but we can create an Inner if we have an Outer:
Outer o = new Outer();
Inner oi = o.new Inner(); // ok: 'o' is the enclosing instance
}
}
如何在静态方法中实例化非静态内部类中的许多其他示例
默认情况下,我实际上将所有嵌套类声明为静态,除非我特别需要访问封闭类的字段。