java如何调用内部类
调用静态内部类
静态内部类(static nested class)可以直接通过外部类名访问,无需依赖外部类实例。
OuterClass.StaticNestedClass nestedObject = new OuterClass.StaticNestedClass();
静态内部类可以直接访问外部类的静态成员,但无法访问非静态成员。
调用非静态内部类
非静态内部类(inner class)必须通过外部类的实例创建。
OuterClass outerObject = new OuterClass();
OuterClass.InnerClass innerObject = outerObject.new InnerClass();
非静态内部类可以直接访问外部类的所有成员(包括私有成员),因为它隐式持有外部类的引用。
匿名内部类的调用
匿名内部类通常用于实现接口或继承类,直接通过 new 关键字实例化。
Runnable runnable = new Runnable() {
@Override
public void run() {
System.out.println("Anonymous inner class");
}
};
匿名内部类常用于事件监听或临时实现接口的场景。
方法内部类的调用
方法内部类(局部内部类)定义在方法内,仅在该方法中可见,需在方法内实例化。
public void outerMethod() {
class MethodInnerClass {
void display() {
System.out.println("Method inner class");
}
}
MethodInnerClass inner = new MethodInnerClass();
inner.display();
}
方法内部类不能包含静态成员,且只能访问方法中的 final 或等效不可变局部变量。
访问权限与注意事项
- 私有内部类:只能在外部类内部实例化,外部无法直接访问。
- 内部类访问外部成员:非静态内部类可直接访问外部类成员,静态内部类仅能访问静态成员。
- 内存泄漏风险:非静态内部类隐式持有外部类引用,可能导致内存泄漏,建议在不需要时设为
static或使用弱引用。
通过以上方式,可以根据需求灵活调用不同类型的内部类。







