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

来源:互联网 发布:电脑修复软件 编辑:程序博客网 时间:2024/06/07 19:41

匿名内部类是定义在方法体或块语句中的内部类,这种内部类没有类名。匿名内部类主要用在当需要定义一个新的类,而这个类又只被使用一次的场景。由于匿名内部类没有自己的类名,所以类的定义及其对象的创建(实例化)是同步完成的。
匿名内部类通过扩展某个类或实现某个接口(只能选一种,不能同时发生)来定义,其一般格式为:
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
原创粉丝点击