静态内部类和非静态内部类的区别
// 外部类
class OuterClass {
private String instanceVar = "外部类实例变量"; // 实例变量
private static String staticVar = "外部类静态变量"; // 静态变量
// 非静态内部类
class InnerClass {
void display() {
// 访问外部类的实例变量和静态变量
System.out.println("非静态内部类访问:" + instanceVar);
System.out.println("非静态内部类访问:" + staticVar);
}
}
// 静态内部类
static class StaticInnerClass {
static void staticMethod() {
System.out.println("静态内部类中的静态方法");
}
void display() {
// 只能访问外部类的静态变量,不能直接访问实例变量
System.out.println("静态内部类访问:" + staticVar);
// System.out.println(instanceVar); // ❌ 编译错误,不能访问外部类的实例变量
}
}
}
public class Main {
public static void main(String[] args) {
// 1. 实例化非静态内部类(必须先创建外部类实例)
OuterClass outer = new OuterClass();
OuterClass.InnerClass inner = outer.new InnerClass();
inner.display();
// 2. 实例化静态内部类(可以直接创建,无需外部类实例)
OuterClass.StaticInnerClass staticInner = new OuterClass.StaticInnerClass();
staticInner.display();
// 3. 访问静态内部类的静态方法(不需要实例化)
OuterClass.StaticInnerClass.staticMethod();
}
}
-
非静态内部类 (
InnerClass
)-
依赖外部类实例,必须先创建
OuterClass
实例,才能创建InnerClass
对象(outer.new InnerClass()
)。 -
可以访问外部类的实例变量和静态变量。
-
-
静态内部类 (
StaticInnerClass
)-
不依赖外部类实例,可以直接创建对象(
new OuterClass.StaticInnerClass()
)。 -
不能访问外部类的实例变量,但可以访问静态变量。
-
可以定义静态成员,如
staticMethod()
,可以直接调用OuterClass.StaticInnerClass.staticMethod()
。
-