📅  最后修改于: 2023-12-03 15:16:02.138000             🧑  作者: Mango
在 Java 中,一个类可以被定义在另一个类的内部,这被称为内部类。
内部类可以访问外部类的私有成员,可以方便地进行封装。
Java 中有四种内部类:
成员内部类是一个类定义在另一个类的内部,并且与外部类的某个实例相关联。
举例:
public class Outer {
private int x = 10;
public class Inner {
public void display() {
System.out.println("x = " + x);
}
}
}
在这个例子中,Inner 类是一个成员内部类,它可以访问到 Outer 类的私有成员 x。
局部内部类是定义在一个方法或代码块内部的类,它只能在其所在的方法或代码块内部被访问。
举例:
public class Outer {
public void display() {
class Inner {
public void print() {
System.out.println("This is an inner class.");
}
}
Inner inner = new Inner();
inner.print();
}
}
在这个例子中,Inner 类是一个局部内部类,它只能在 display() 方法内被访问。
匿名内部类是一个没有名字的类,它通常用来创建一个实现某个接口或继承某个类的对象。
举例:
public class Outer {
public void display() {
// 匿名内部类实现接口
new Runnable() {
@Override
public void run() {
System.out.println("This is an anonymous inner class.");
}
}.run();
// 匿名内部类继承类
new Thread() {
@Override
public void run() {
System.out.println("This is another anonymous inner class.");
}
}.start();
}
}
在这个例子中,我们使用了两个匿名内部类,一个实现了 Runnable 接口,另一个继承了 Thread 类。
静态内部类是一个与外部类的实例无关的类,可以被直接使用。
举例:
public class Outer {
private static int y = 20;
public static class Inner {
public void display() {
System.out.println("y = " + y);
}
}
}
在这个例子中,Inner 类是一个静态内部类,与 Outer 类的实例无关。
内部类的访问控制规则与普通类一样,但是内部类有其特殊性,在内部类中使用特殊语法可以访问外部类的私有成员。
举例:
public class Outer {
private int x = 10;
public class Inner {
public void display() {
System.out.println("x = " + x);
}
}
}
public class Test {
public static void main(String[] args) {
Outer outer = new Outer();
Outer.Inner inner = outer.new Inner();
inner.display();
}
}
在这个例子中,我们在 Test 类中创建了 Outer 的一个实例 outer,并通过 outer.new Inner() 的方式创建了 Inner 的一个实例 inner。在 Inner 的 display() 方法中,我们可以访问 Outer 的私有成员 x。
内部类是 Java 中一种非常有用的特性,它可以方便地进行封装和代码复用。我们可以根据具体的需求选择合适的内部类种类来使用。