java如何访问内部类
访问静态内部类
静态内部类(static nested class)可以直接通过外部类名访问,无需依赖外部类实例。
class OuterClass {
static class StaticNestedClass {
void display() {
System.out.println("Static nested class");
}
}
}
// 访问方式
OuterClass.StaticNestedClass nested = new OuterClass.StaticNestedClass();
nested.display();
访问非静态内部类
非静态内部类(inner class)必须通过外部类的实例创建对象。
class OuterClass {
class InnerClass {
void display() {
System.out.println("Inner class");
}
}
}
// 访问方式
OuterClass outer = new OuterClass();
OuterClass.InnerClass inner = outer.new InnerClass();
inner.display();
访问局部内部类
局部内部类定义在方法或作用域内,仅能在定义它的块中实例化。
class OuterClass {
void method() {
class LocalInnerClass {
void display() {
System.out.println("Local inner class");
}
}
LocalInnerClass local = new LocalInnerClass();
local.display();
}
}
// 调用方法触发局部内部类
OuterClass outer = new OuterClass();
outer.method();
访问匿名内部类
匿名内部类通常用于实现接口或继承类,直接通过实例化时定义类体。
interface Greeting {
void greet();
}
class OuterClass {
void method() {
Greeting greeting = new Greeting() {
public void greet() {
System.out.println("Anonymous inner class");
}
};
greeting.greet();
}
}
// 调用方法触发匿名内部类
OuterClass outer = new OuterClass();
outer.method();
注意事项
- 非静态内部类隐含持有外部类的引用,可能引发内存泄漏。
- 静态内部类无法直接访问外部类的非静态成员。
- 局部内部类和匿名内部类的作用域受限,无法在外部重复使用。







