Java----匿名内部类与适配器模式

匿名内部类是定义在方法体或块语句中的内部类,这种内部类没有类名。匿名内部类主要用在当需要定义一个新的类,而这个类又只被使用一次的场景。由于匿名内部类没有自己的类名,所以类的定义及其对象的创建(实例化)是同步完成的。
匿名内部类通过扩展某个类或实现某个接口(只能选一种,不能同时发生)来定义,其一般格式为:
new 超类名或接口名(参数列表){
类定义
}
说明:
(1)根据格式可知,匿名内部类一定是在new后面,要么继承一个类,要么实现一个接口,没有类名。
(2)匿名内部类是唯一一个没有构造方法的类。系统会自动调用超类的构造方法。
匿名内部类将实现类,重写方法和创建对象一步合成,从而简化编程的代码量。


适配器模式:预实现,先做一个抽象类,将接口中那些不常用的方法先实现了(空实现),传参的时候传适配器就可以。适用于需要添加的匿名内部类很多。
举例:鼠标有许多按钮,每个按钮产生不同的点击事件。事件通过鼠标监听器监听。

public class AdaptDemo {
    public static void main(String[] args){
        Button b = new Button();
        //匿名内部类对象,如果不用适配器,则需要重写接口中的所有方法
        b.setListener(new MouseAdapter(){//传入的是适配器,因为它实现了接口
            public void onclick(){            //重写方法
                System.out.println("单击了一下");
            }
        });
        b.click();
        b.dbclick();
        //方法链编程
        new Button().setListener(new MouseAdapter(){
            public void onclick(){
                System.out.println("单击了匿名Button");
            }
            public void onDbclick(){
                System.out.println("双击了匿名Button");
            }
        }).click().dbclick();
    }

}
class Button{
    private MouseListener listener;
    public Button setListener(MouseListener listener){
        this.listener=listener;
        return this;
    }
    public Button click(){
        listener.onclick();
        return this;
    }
    public void dbclick(){
        listener.onDbclick();
    }
}
interface MouseListener{             //鼠标监听器
    public void onclick();
    public void onDbclick();
    public void onRightclick();
    public void onMiddleclick();
}
//适配器,实现接口中的方法,一般是不常用的方法,也可以全部实现,可以空实现,也可以具体实现
abstract class MouseAdapter implements MouseListener{
    public void onclick(){
        System.out.println("单击");
    }
    public void onDbclick(){}
    public void onRightclick(){}
    public void onMiddleclick(){}
}
运行结果:
       单击了一下
       单击了匿名Button
       双击了匿名Button
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值