• Java匿名类


    Java 匿名类是一种特殊的内部类,它没有名字,并且通常用来简化代码实现,尤其是在实现接口或者抽象类的实例时。匿名类可以在实例化时定义其行为,而不需要创建单独的类文件。

    匿名类的特点

    1. 没有名字:匿名类是没有名字的类,不能在代码的其他部分直接引用它们。
    2. 在声明时实例化:匿名类是在声明时同时进行实例化的。
    3. 只能使用一次:匿名类通常用于简化一次性对象的创建。

    使用匿名类的场景

    1. 实现接口:匿名类常用于实现只有一个方法的接口(如回调函数)。
    2. 扩展类:匿名类可以用于扩展一个类,并立即提供其实现。

    匿名类的语法

    匿名类的语法包括一个接口或类的名称,后跟一对花括号 {},其中包含类的实现。

    示例 1:实现接口

    假设有一个接口 Greeting

    interface Greeting {
        void sayHello();
    }
    

    使用匿名类来实现 Greeting 接口:

    public class Main {
        public static void main(String[] args) {
            Greeting greeting = new Greeting() {
                @Override
                public void sayHello() {
                    System.out.println("Hello from Anonymous Inner Class");
                }
            };
    
            greeting.sayHello();
        }
    }
    

    在这个示例中,匿名类实现了 Greeting 接口,并覆盖了 sayHello 方法。创建了一个 Greeting 类型的对象 greeting,并调用了 sayHello 方法。

    示例 2:扩展类

    假设有一个基类 Person

    class Person {
        public void display() {
            System.out.println("I am a person");
        }
    }
    

    使用匿名类来扩展 Person 类:

    public class Main {
        public static void main(String[] args) {
            Person person = new Person() {
                @Override
                public void display() {
                    System.out.println("I am an anonymous person");
                }
            };
    
            person.display();
        }
    }
    

    在这个示例中,匿名类扩展了 Person 类,并覆盖了 display 方法。创建了一个 Person 类型的对象 person,并调用了 display 方法。

    匿名类的限制

    1. 没有构造函数:匿名类没有名字,因此不能定义构造函数。可以使用初始化块来初始化匿名类。
    2. 仅能使用一次:匿名类只能在其定义的位置使用一次,无法在其他地方重用。
    3. 代码可读性:过多使用匿名类可能会降低代码的可读性,特别是在复杂的实现中。

    匿名类的使用示例

    匿名类在实际开发中广泛用于回调函数、事件处理等场景。

    示例 3:事件处理

    import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JOptionPane;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    
    public class Main {
        public static void main(String[] args) {
            JFrame frame = new JFrame("Anonymous Class Example");
            JButton button = new JButton("Click Me");
    
            button.addActionListener(new ActionListener() {
                @Override
                public void actionPerformed(ActionEvent e) {
                    JOptionPane.showMessageDialog(frame, "Button Clicked!");
                }
            });
    
            frame.add(button);
            frame.setSize(300, 200);
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.setVisible(true);
        }
    }
    

    在这个示例中,匿名类用于处理按钮的点击事件,实现了 ActionListener 接口并覆盖了 actionPerformed 方法。

    总结

    匿名类是一种简化代码实现的方式,特别适用于一次性使用的类。通过匿名类,可以快速实现接口或扩展类,而不需要定义额外的类文件。在合适的场景下使用匿名类可以使代码更加简洁和高效,但应注意避免过度使用以免影响代码的可读性。

  • 相关阅读:
    创建线程的4种方法
    Vue项目实战——实现GitHub搜索案例(学以致用,两小时带你巩固和强化Vue知识点)
    ES6 入门教程 17 Promise 对象 17.11 Promise.reject() & 17.12 应用 & 17.13 Promise.try()
    C/C++输出整数部分 2021年12月电子学会青少年软件编程(C/C++)等级考试一级真题答案解析
    tomcat默认最大线程数、等待队列长度、连接超时时间
    Verilog初体验
    【Vue】轻松理解数据代理
    一般人我劝你还是要不自学软件测试.....
    Python中的闭包是怎么回事儿?五分钟看懂。
    基于pig架构的OAuth2学习记录
  • 原文地址:https://blog.csdn.net/u011019141/article/details/139832870