静态内部类可直接访问外部类所有静态成员(含私有),但不能访问非静态成员;访问同名静态成员需用outerclass.staticfield;外部类可通过outerclass.innerclass创建其实例。

静态内部类可以直接访问外部类的所有静态成员,包括私有静态成员,无需创建外部类实例,也不需要通过对象引用。
能直接访问哪些静态成员
静态内部类可以自由访问外部类中声明的:
- 所有 static 变量(public、protected、默认、private 都行)
- 所有 static 方法(同样支持任意访问修饰符)
- 即使这些成员是 private,也能直接调用或读取
不能访问什么
静态内部类与外部类实例无关,因此:
- 不能直接访问外部类的非静态成员(如实例变量、实例方法)
- 若确实需要访问实例成员,必须显式创建外部类对象,再通过该对象访问
- 例如:
new Outer().instanceField或new Outer().instanceMethod()
访问重名静态成员的写法
当静态内部类和外部类存在同名静态成员时:
- 直接写变量名,默认访问的是内部类自身的成员
- 想明确访问外部类的静态成员,写成
OuterClass.staticField即可 - 不需要加
this或OuterClass.this—— 那是给非静态内部类用的
外部其他类如何使用静态内部类
因为它是静态嵌套类,所以调用方式更接近普通类:
- 创建实例:
OuterClass.InnerClass obj = new OuterClass.InnerClass(); - 只要权限允许(比如 public),外部类甚至可以不创建 OuterClass 实例就直接用
- 如果 InnerClass 是 private 的,只能在 OuterClass 内部使用,或通过 public 方法返回其实例
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











