Java内部类和匿名类
Java内部类和匿名类是在一个class或一个方法内部定义的类,可以被用来实现一些特定的功能或者增强代码的可读性。本文将详细介绍Java内部类和匿名类的概念、语法和应用。
内部类
内部类是定义在一个类中的类,使用关键字class
来创建。内部类可以分为四类:静态内部类、成员内部类、局部内部类和匿名内部类,其中前三类的用法比较常见,最后一类是通过匿名类来实现的。
静态内部类
静态内部类是被声明为静态的内部类,在声明时使用关键字static
。静态内部类不依赖于外部类的实例而存在,可以直接通过外部类的名字访问,例如OuterClass.StaticInnerClass
。
java
public class OuterClass {
private static String message = "hello";
static class StaticInnerClass {
public void printMessage() {
System.out.println(message);
}
}
}
在外部类中访问内部类的方法如下:
java
public class Main {
public static void main(String[] args) {
OuterClass.StaticInnerClass staticInnerClass = new OuterClass.StaticInnerClass();
staticInnerClass.printMessage(); // output: hello
}
}
成员内部类
成员内部类是被声明在外部类中方法外部的类,不是静态类,必须创建一个外部类的实例才能访问内部类。成员内部类可以访问外部类的成员变量和方法。
java
public class OuterClass {
private String message = "hello";
class InnerClass {
public void printMessage() {
System.out.println(message);
}
}
}
在外部类中访问内部类的方法如下:
java
public class Main {
public static void main(String[] args) {
OuterClass outerClass = new OuterClass();
OuterClass.InnerClass innerClass = outerClass.new InnerClass();
innerClass.printMessage(); // output: hello
}
}
局部内部类
局部内部类是被定义在一个方法内部的类,作用域只在方法内部,其他方法无法访问。局部内部类不能声明为public
或private
,只能声明为final
或abstract
。
java
public class OuterClass {
private String message = "hello";
public void printMessage() {
class LocalInnerClass {
public void printMessage() {
System.out.println(message);
}
}
LocalInnerClass localInnerClass = new LocalInnerClass();
localInnerClass.printMessage();
}
}
在外部类中访问内部类的方法如下:
java
public class Main {
public static void main(String[] args) {
OuterClass outerClass = new OuterClass();
outerClass.printMessage(); // output: hello
}
}
匿名内部类
匿名内部类是没有名字的内部类,一般用于创建接口实例或抽象类实例。匿名内部类在声明时会同时创建一个实例,可以直接访问外部类的成员变量和方法。
java
public class OuterClass {
private String message = "hello";
public void printMessage() {
Button button = new Button();
button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
System.out.println(message);
}
});
}
}
在外部类中访问内部类的方法如下:
java
public class Main {
public static void main(String[] args) {
OuterClass outerClass = new OuterClass();
outerClass.printMessage(); // output: hello
}
}
总结
本文介绍了Java内部类和匿名类的概念、语法和应用。内部类有静态内部类、成员内部类、局部内部类和匿名内部类四种类型,适合不同场合使用。掌握内部类和匿名类的用法,可以提高Java编程效率和代码可读性。