📅  最后修改于: 2023-12-03 15:16:34.746000             🧑  作者: Mango
在Java中,内部类是定义在另一个类内部的类。它们提供了一种组织和封装代码的方式,可以更好地实现面向对象的特性。有四种类型的Java内部类:成员内部类、静态内部类、局部内部类和匿名内部类。
成员内部类是定义在其他类的内部的普通类。它可以访问外部类的成员变量和方法,并且可以使用this
关键字直接引用外部类的实例。成员内部类可以有访问修饰符,可以被外部类的其他类访问。以下是一个成员内部类的示例:
public class OuterClass {
private int outerData;
public class InnerClass {
public void printOuterData() {
System.out.println("Outer data: " + outerData);
}
}
}
在外部类中创建内部类的实例的示例代码:
OuterClass outer = new OuterClass();
OuterClass.InnerClass inner = outer.new InnerClass();
静态内部类是被声明为静态的内部类,它与外部类的实例无关。静态内部类可以访问外部类的静态成员,但不能访问外部类的实例变量和方法。以下是一个静态内部类的示例:
public class OuterClass {
private static int outerData;
public static class InnerClass {
public void printOuterData() {
System.out.println("Outer data: " + outerData);
}
}
}
在外部类之外创建静态内部类的实例的示例代码:
OuterClass.InnerClass inner = new OuterClass.InnerClass();
局部内部类是定义在方法、构造函数或代码块内部的类。它的作用域限定在包含它的代码块内部。局部内部类可以访问外部类的成员,也可以访问包含它的代码块的局部变量,但局部变量必须被声明为final
或是effectively final。以下是一个局部内部类的示例:
public class OuterClass {
public void outerMethod() {
final int outerData = 10;
class InnerClass {
public void printOuterData() {
System.out.println("Outer data: " + outerData);
}
}
InnerClass inner = new InnerClass();
inner.printOuterData();
}
}
匿名内部类是没有名字的内部类,它通常用于创建一个实现接口或抽象类的对象,并且只使用一次。它不能有构造函数,但可以有实例初始化块。以下是一个匿名内部类的示例:
public class OuterClass {
public void outerMethod() {
Runnable runnable = new Runnable() {
@Override
public void run() {
System.out.println("Hello from anonymous inner class!");
}
};
Thread thread = new Thread(runnable);
thread.start();
}
}
以上是Java内部类的简要介绍,它们提供了一种更灵活的代码组织方式,可以增强代码的可读性和复用性。在适当的时候使用内部类可以使代码更加模块化和更容易维护。