在Java中,内部类(Inner Class)是一种嵌套在另一个类中的类。内部类分为四种类型:成员内部类(Non-static Inner Class)、静态内部类(Static Inner Class)、局部内部类(Local Inner Class)和匿名内部类(Anonymous Inner Class)。下面将详细介绍如何调用本类内部成员类的实例。
成员内部类
成员内部类是定义在另一个类的非静态成员内部的一个类。要创建并调用成员内部类的实例,可以通过以下步骤:
- 创建外部类实例:首先需要创建外部类的实例。
- 创建内部类实例:通过外部类实例来创建内部类实例。
public class OuterClass {
private int outerField;
public class InnerClass {
private int innerField;
public InnerClass(int innerField) {
this.innerField = innerField;
}
public void display() {
System.out.println("Inner class field: " + innerField);
}
}
public void createInnerClass() {
InnerClass inner = new InnerClass(10);
inner.display();
}
}
public class Main {
public static void main(String[] args) {
OuterClass outer = new OuterClass();
outer.createInnerClass();
}
}
在上面的例子中,OuterClass 是外部类,InnerClass 是成员内部类。通过创建 OuterClass 的实例,并调用其 createInnerClass 方法,可以创建并调用 InnerClass 的实例。
静态内部类
静态内部类是定义在外部类静态成员内部的类。静态内部类可以不依赖于外部类的实例来创建。
public class OuterClass {
private int outerField;
public static class InnerClass {
private int innerField;
public InnerClass(int innerField) {
this.innerField = innerField;
}
public void display() {
System.out.println("Inner class field: " + innerField);
}
}
public static void createInnerClass() {
InnerClass inner = new InnerClass(10);
inner.display();
}
}
public class Main {
public static void main(String[] args) {
OuterClass.InnerClass inner = new OuterClass.InnerClass(10);
inner.display();
}
}
在上面的例子中,静态内部类 InnerClass 可以直接通过外部类名来访问。
局部内部类
局部内部类是定义在方法或作用域中的类。局部内部类不能有访问修饰符,并且不能是静态的。
public class OuterClass {
private int outerField;
public void method() {
class InnerClass {
private int innerField;
public InnerClass(int innerField) {
this.innerField = innerField;
}
public void display() {
System.out.println("Inner class field: " + innerField);
}
}
InnerClass inner = new InnerClass(10);
inner.display();
}
}
public class Main {
public static void main(String[] args) {
OuterClass outer = new OuterClass();
outer.method();
}
}
在上面的例子中,InnerClass 是局部内部类,它被定义在 method 方法中。
匿名内部类
匿名内部类是在创建一个类的同时创建其实例的类。匿名内部类通常用于实现接口或继承类。
public class OuterClass {
public void method() {
Runnable runnable = new Runnable() {
@Override
public void run() {
System.out.println("Hello from anonymous inner class!");
}
};
new Thread(runnable).start();
}
}
public class Main {
public static void main(String[] args) {
OuterClass outer = new OuterClass();
outer.method();
}
}
在上面的例子中,Runnable 是一个接口,匿名内部类实现了这个接口。
总结,通过以上方法,可以在Java中调用本类内部成员类的实例。选择哪种方法取决于具体的使用场景和需求。
