java如何调用内部类
调用静态内部类
静态内部类(static nested class)可以直接通过外部类名访问,无需依赖外部类实例。
OuterClass.StaticNestedClass nestedObject = new OuterClass.StaticNestedClass();
调用非静态内部类
非静态内部类(inner class)必须通过外部类的实例创建。
OuterClass outerObject = new OuterClass();
OuterClass.InnerClass innerObject = outerObject.new InnerClass();
在外部类中调用内部类
外部类可直接通过内部类名实例化内部类对象。
public class OuterClass {
private class InnerClass {
void display() {
System.out.println("Inner class method");
}
}
void callInner() {
InnerClass inner = new InnerClass();
inner.display();
}
}
在内部类中访问外部类成员
非静态内部类隐含持有外部类实例的引用,可通过OuterClass.this访问外部类成员。
public class OuterClass {
private String outerField = "Outer field";
class InnerClass {
void accessOuter() {
System.out.println(OuterClass.this.outerField);
}
}
}
局部内部类的调用
局部内部类定义在方法或作用域内,仅能在该作用域中实例化。
public class OuterClass {
void method() {
class LocalInnerClass {
void display() {
System.out.println("Local inner class");
}
}
LocalInnerClass local = new LocalInnerClass();
local.display();
}
}
匿名内部类的调用
匿名内部类通常用于实现接口或继承类,直接通过new关键字定义并实例化。
interface Greeting {
void greet();
}
public class Main {
public static void main(String[] args) {
Greeting greeting = new Greeting() {
@Override
public void greet() {
System.out.println("Hello from anonymous class");
}
};
greeting.greet();
}
}
注意事项
- 静态内部类不能直接访问外部类的非静态成员。
- 非静态内部类依赖外部类实例,因此不能定义静态成员(除非是常量)。
- 局部内部类和匿名内部类的作用域仅限于定义它们的块内。







