• java 匿名内部类


    java 匿名内部类

    匿名内部类:

    • 本质上是一个没有名字的局部内部类,定义在方法中、代码块中等
    • 作用:方便创建子类对象,最终目的为了简化代码编写。

    **格式:**new 类|抽象类名|接口名(){

    ​ 重写方法;

    }

    Employee e = new Employee(){
        public void work(){
            
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5

    使用实例:

    public class Test {
        public static void main(String[] args) {
            //利用匿名内部类创建对象
            Animal a = new Animal() {
                @Override
                public void run() {
                    System.out.println("tigger跑的快!");
                }
            };
    
            a.run();
        }
    }
    
    
    
    abstract class Animal{
        public abstract void run();
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    特点总结

    • 匿名内部类是一个没有名字的内部类
    • 匿名内部类写出来就会产生一个匿名内部类的对象
    • 匿名内部类的对象类型相当于是当前new的那个类型的子类类型。

    总结

    1. 匿名内部类的作用?

      • 方便创建子类对象、最终目的为了简化代码编写。
    2. 匿名内部类的格式

      1. Employee e = new Employee(){
            @override
            public void work(){
                
            }
        }
        
        • 1
        • 2
        • 3
        • 4
        • 5
        • 6
    3. 匿名内部类的特点?

      • 匿名内部类是一个没有名字的内部类。
      • 匿名内部类写出来就会产生一个匿名内部类的对象
      • 匿名内部类的对象类型相当于是当前new的那个的类型的子类类型。

    匿名内部类的常见使用形式

    ppublic class Test1 {
        public static void main(String[] args) {
            go(new swim() {
                @Override
                public void swimming() {
                    System.out.println("学生在欢快的自由泳!");
                }
            });
    
            System.out.println("-----------------------------");
    
            go(new swim() {
                @Override
                public void swimming() {
                    System.out.println("老师游的贼快!");
                }
            });
    
        }
    
        public static void go(swim s){
            System.out.println("比赛开始!");
            s.swimming();
            System.out.println("比赛结束!");
        };
    }
    
    interface swim{
        public void swimming();
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31

    总结:匿名内部类可以作为方法的实际参数进行传输。

    匿名内部类真实使用场景演示

    import javax.swing.*;
    import java.awt.*;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    
    public class Test2 {
        public static void main(String[] args) {
            //创建窗口对象
            JFrame win = new JFrame("登录界面");
            //创建桌布
            JPanel panel = new JPanel();
            win.add(panel);
            //创建点击按钮
            JButton button = new JButton("登录");
            //将按钮添加到桌布上
            panel.add(button);
    
            //设置窗口大小
            win.setSize(400,300);
            //设置窗口位置
            win.setLocationRelativeTo(null);
            //展示窗口
            win.setVisible(true);
    
            //为按钮添加事件监听器
            button.addActionListener(new ActionListener() {
                @Override
                public void actionPerformed(ActionEvent e) {
                    JOptionPane.showConfirmDialog(win,"成功点击登录!");
                }
            });
        }
    
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35

    使用总结:

    开发中不是我们主动去定义匿名内部类的,而是别人需要我们写或者我们可以写的时候才会使用。匿名内部类的代码可以实现代码进一步简化。

  • 相关阅读:
    content向background发送消息的异步消息返回
    Maven插件初体验【附源码】
    大学生网课答案查询公众号搭建教程
    互联网摸鱼日报(2022-11-05)
    JAVA基础(四十二)——集合之Collection
    C++:继承
    121 买卖股票的最佳时机
    支持CAN FD的Kvaser PCIEcan 4xCAN v2编码: 73-30130-01414-5如何应用?
    java计算机毕业设计计算机类专业考研交流学习平台源码+mysql数据库+系统+lw文档+部署
    (主)9.26锁存器&状态机方法、题解大综合(加码加码加码)
  • 原文地址:https://blog.csdn.net/weixin_45102678/article/details/126335255