Java 中的内部类(Inner Class)是定义在另一个类内部的类,内部类可以访问外部类的成员变量和方法,并且外部类也可以访问内部类的成员变量和方法。以下是关于 Java 内部类的一些知识点和使用方法:
- 内部类的定义:定义内部类需要使用
class关键字,并将其定义在其他类的内部。内部类可以是成员内部类、局部内部类、匿名内部类等几种类型。
例如,下面这个 OuterClass 类定义了一个成员内部类 InnerClass:
public class OuterClass {
private int x;
public class InnerClass {
public void display() {
System.out.println("x = " + x);
}
}
}
2. 内部类的访问:内部类可以访问外部类的所有成员变量和方法,包括 private 类型的成员。在内部类中访问外部类的成员需要使用 外部类名.成员变量 或 外部类名.成员方法() 的方式。
例如,在上面的例子中,内部类 InnerClass 可以使用外部类的 x 成员变量:
public class OuterClass {
private int x;
public class InnerClass {
public void display() {
System.out.println("x = " + x);
}
}
public void test() {
InnerClass inner = new InnerClass();
inner.display();
}
}
在 test() 方法中,实例化了内部类 InnerClass,并调用了它的 display() 方法,从而访问了外部类的成员变量 x。
- 内部类的作用:内部类通常用于实现一些特定的功能,例如实现某个接口、继承某个类、访问封装的数据等。内部类可以被看作是外部类的一个组成部分,可以更好地进行封装和隐藏。
例如,下面这个 OuterClass 类通过一个匿名内部类来实现了 ActionListener 接口:
public class OuterClass {
public void addActionListener(ActionListener listener) {
JButton button = new JButton("Click me");
button.addActionListener(listener);
}
public static void main(String[] args) {
OuterClass outer = new OuterClass();
outer.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("Button clicked.");
}
});
}
}
在这个例子中,addActionListener() 方法接受一个 ActionListener 类型的参数,它实例化了一个 JButton 对象并添加了一个 Action 监听器。在 main() 方法中,使用一个匿名的 ActionListener 类来实现了 actionPerformed() 方法,使得按钮点击后打印 “Button clicked.”。
- 总之,Java 的内部类是一种非常灵活的机制,它可以帮助我们实现一些特定的功能,例如实现接口、继承类、访问封装的数据等。内部类可以访问外部类的成员变量和方法,外部类也可以访问内部类的成员变量和方法。在实际编程中,需要根据具体的业务需求来选择使用内部类、匿名内部类还是 lambda 表达式来实现。