Skip to content
目录概览

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
    }
}

局部内部类

局部内部类是被定义在一个方法内部的类,作用域只在方法内部,其他方法无法访问。局部内部类不能声明为publicprivate,只能声明为finalabstract

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编程效率和代码可读性。