-
概念定义
- 在 Java 中,内部类(Inner Class)是定义在另一个类内部的类。包含内部类的类称为外部类(Outer Class)。内部类可以访问外部类的成员(包括私有成员),并且可以提供一种将相关的类组织在一起的方式,使得代码结构更加紧凑和模块化。
-
内部类的种类
- 成员内部类(Member Inner Class)
- 定义在类的内部,和成员变量、成员方法处于同一级别。就像成员变量一样,成员内部类可以使用各种访问修饰符(
public
、private
、protected
)。 - 例如:
- 定义在类的内部,和成员变量、成员方法处于同一级别。就像成员变量一样,成员内部类可以使用各种访问修饰符(
- 成员内部类(Member Inner Class)
class Outer {
private int outerVariable = 10;
class Inner {
public void accessOuterVariable() {
System.out.println("外部变量的值:" + outerVariable);
}
}
}
- 在这里,
Inner
是Outer
的成员内部类,它可以访问Outer
类中的outerVariable
。 - 静态内部类(Static Inner Class)
- 用
static
关键字修饰的内部类。静态内部类和外部类的实例没有关联,它不能直接访问外部类的非静态成员,但可以访问外部类的静态成员。 - 例如:
- 用
class Outer {
private static int staticOuterVariable = 20;
static class StaticInner {
public void accessStaticOuterVariable() {
System.out.println("外部静态变量的值:" + staticOuterVariable);
}
}
}
- 在这个例子中,
StaticInner
是Outer
的静态内部类,它可以访问Outer
类中的静态变量staticOuterVariable
。 - 方法内部类(Method Inner Class)
- 定义在方法内部的类,也称为局部内部类。它的作用域仅限于定义它的方法内部,并且可以访问方法中的局部变量(但要求这些局部变量是
final
的,从 Java 8 开始,实际上是隐式final
)。 - 例如:
- 定义在方法内部的类,也称为局部内部类。它的作用域仅限于定义它的方法内部,并且可以访问方法中的局部变量(但要求这些局部变量是
class Outer {
public void outerMethod() {
final int localVariable = 30;
class MethodInner {
public void accessLocalVariable() {
System.out.println("局部变量的值:" + localVariable);
}
}
MethodInner mi = new MethodInner();
mi.accessLocalVariable();
}
}
- 这里,
MethodInner
是outerMethod
方法内部的类,它可以访问outerMethod
中的localVariable
。 - 匿名内部类(Anonymous Inner Class)
- 没有名字的内部类,通常用于创建只需要使用一次的类。它一般是继承一个类或者实现一个接口,并且在定义的同时创建一个实例。
- 例如,创建一个
Runnable
接口的匿名内部类来创建一个线程:
public class Main {
public static void main(String[] args) {
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
System.out.println("线程正在运行");
}
});
thread.start();
}
}
- 在这个例子中,
new Runnable() {... }
就是一个匿名内部类,它实现了Runnable
接口,并且在定义的同时创建了一个实例作为Thread
类的参数。
- 内部类的优点
- 增强封装性:内部类可以访问外部类的私有成员,同时外部类可以控制内部类的访问权限,使得数据和行为的封装更加紧密。
- 逻辑分组:可以将相关的类放在一起,使代码结构更清晰。例如,一个表示图形的外部类可以有内部类分别表示图形的绘制策略、计算面积策略等。
- 实现多重继承(某种程度上):虽然 Java 不支持类的多重继承,但通过内部类可以实现类似的效果。例如,一个类可以通过内部类实现多个接口,从而具有多种行为。