美文网首页js css html
22.面向对象进阶:内部类——匿名内部类

22.面向对象进阶:内部类——匿名内部类

作者: 每天起床都想摆 | 来源:发表于2022-01-29 15:17 被阅读0次

内部类之四:匿名内部类

匿名内部类概述

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

格式

new 类名|抽象类名|接口名(){
    重写方法;
};

测试代码

package com.java.anonymous;

/**
 * 匿名内部类的形式和特点
 */
public class Test {
    public static void main(String[] args) {
/*      
        多态写法
        Animal animal = new Tiger();
        animal.run();
*/

        //匿名内部类写法
        //不用创建子类就可以完成构建对象调用功能
        Animal animal = new Animal(){

            @Override
            public void run() {
                System.out.println("两只老虎跑得快");
            }
        };
    }
}

abstract class Animal {
    public abstract void run();
}

class Tiger extends Animal {

    @Override
    public void run() {
        System.out.println("两只老虎跑得快");
    }
}

特点总结

  • 匿名内部类是一个没有名字的内部类
  • 匿名内部类写出来就会产生一个匿名内部类的对象
  • 匿名内部类的对象类型相当于是当前new的那个的类型的子类类型
  • 匿名内部类也会生成.class文件,因此其本身既是对象也是类

匿名内部类常见使用形式

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

    第三点

    package com.java.anonymous;
    
    /**
     * 匿名内部类的使用形式
     */
    public class Test2 {
        public static void main(String[] args) {
    
            // 1.原本的学生子类使用匿名内部类实现
            Swimming s = new Swimming() {
    
                @Override
                public void swim() {
                    System.out.println("学生蛙泳");
                }
            };
            go(s);
    
            // 2.原本的老师子类使用匿名内部类实现
            Swimming s1 = new Swimming() {
    
                @Override
                public void swim() {
                    System.out.println("老师仰泳");
                }
            };
            go(s1);
    
            // 3.匿名内部类作为入参直接放在go()方法里面,简化书写
            go(new Swimming() {
    
                @Override
                public void swim() {
                    System.out.println("裁判蝶泳");
                }
            });
        }
    
        /**
         * 中转方法,传递接口类型的实现类对象调用抽象方法
         */
        public static void go(Swimming s) {
            s.swim();
        }
    }
    
    interface Swimming {
        void swim();
    }
    

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

  • 给按钮绑定点击事件

    package com.java.anonymous;
    
    import javax.swing.*;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    
    /**
     * 通过GUI编程,理解匿名内部类的真实使用场景
     */
    public class Test3 {
        public static void main(String[] args) {
            // 1.创建主窗口,桌布对按钮尺寸自适应
            JFrame win = new JFrame("登陆界面");
            JPanel panel = new JPanel();
            win.add(panel);
    
            // 2.创建一个按钮对象
            JButton btn = new JButton("登录");
    
            // 匿名对象监听器,实现对点击进行监听和事件绑定
            btn.addActionListener(new ActionListener() {
                @Override
                public void actionPerformed(ActionEvent e) {
                    JOptionPane.showMessageDialog(win, "点击成功");
                }
            });
            /*
            匿名内部类在此处的简化形式
    
            btn.addActionListener(e -> JOptionPane.showMessageDialog(win, "点击"));
             */
    
            // 3.把按钮对象添加到窗口上展示
            panel.add(btn);
    
            // 4.展示窗口
            win.setSize(400, 300);
            win.setLocationRelativeTo(null);    // 居中显示
            win.setVisible(true);
        }
    }
    
    
  • 开发中不是我们主动去定义匿名内部类的,而是别人需要我们写或者我们可以写的时候才会使用,匿名内部类的代码可以实现代码进一步的简化

相关文章

  • 22.面向对象进阶:内部类——匿名内部类

    内部类之四:匿名内部类 匿名内部类概述 本质上是一个没有名字的局部内部类,定义在方法中,代码块中,等 作用:方便创...

  • 内部类

    成员内部类 局部内部类(定义在方法内和定义在作用域内的类) 匿名内部类

  • java面向对象笔记

    面向对象三要素 抽象 接口 面向对象(局部内部类访问局部变量的问题) 匿名内部类

  • Java 内部类

    内部类包括成员内部类、方法内部类、*静态内部类、匿名内部类*。 内部类的作用 由于内部类的实现和外部类没有关系,内...

  • 面向对象总结

    面向对象思想 类与对象 定义类格式: 面向对象的三大特征 封装 继承 多态: 抽象类 接口 内部类 匿名内部类: ...

  • Java 内部类、静态内部类、方法内部类(未完待续)

    内部类 什么是内部类?内部类其实就是在一个类中创建的类。内部类有四种: 成员内部类 静态内部类 局部内部类 匿名内...

  • java 内部类

    一般有四种内部类的使用方式: 嵌套的内部类 方法内的内部类 静态内部类 匿名内部类 什么时候用内部类: 有时候明显...

  • Java匿名内部类

    导语 学完匿名内部类就懂的情书。 主要内容 接口与抽象类和匿名内部类的关系 具体内容 匿名内部类也就是没有名字的内...

  • java中的匿名内部类总结

    匿名内部类也就是没有名字的内部类 正因为没有名字,所以匿名内部类只能使用一次,它通常用来简化代码编写 但使用匿名内...

  • Java 内部类

    1. 内部类 概念:在一个类的内部再定义一个完整的类内部类分为 4 类:成员内部类、静态内部类、局部内部类、匿名内...

网友评论

    本文标题:22.面向对象进阶:内部类——匿名内部类

    本文链接:https://www.haomeiwen.com/subject/agffkrtx.html