有关于内部类(Java)

113 阅读2分钟

Java 中的内部类(Inner Class)是定义在另一个类内部的类,内部类可以访问外部类的成员变量和方法,并且外部类也可以访问内部类的成员变量和方法。以下是关于 Java 内部类的一些知识点和使用方法:

  1. 内部类的定义:定义内部类需要使用 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。

  1. 内部类的作用:内部类通常用于实现一些特定的功能,例如实现某个接口、继承某个类、访问封装的数据等。内部类可以被看作是外部类的一个组成部分,可以更好地进行封装和隐藏。

例如,下面这个 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 表达式来实现。