1.概念:把一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配无法在一起工作的两个类可以在一起工作。
2.场景:
//1.创建一个鼠标事件接口
1 interface MouseListener(){ 2 public void onClick();//单机事件 3 public void onDbClick();//双击事件 4 public void onRightClick();//右键事件 5 }
//2.创建一个按钮对象
1 class Button(){ 2 private MouseListener l;//监听事件 3 public void setListener( MouseListener l){ 4 this.l=l; 5 }
//单击方法 6 public void click(){ 7 l.onClick(); 8 }
//双击方法
9 public void dbClick(){
10 l.onDbClick();
11 }
12 }
//3.运行
3.1创建单个按钮实现单击操作
1 class Adapter(){ 2 public static void main(String args[]){ 3 Button a=new Button(); 4 //匿名内部类对象 5 a.setListener(new MouseListener(){ 6 public void onClick(){ 7 System.out.println("单击了a按钮"); 8 }; 9 public void onDbClick(){};//双击事件 10 public void onRightClick(){};//右键事件 11 }); 12 a.click(); 13 } 14 15 }
3.2创建多个按钮,实现单击事件
1 class Adapter(){ 2 public static void main(String args[]){ 3 Button a=new Button(); 4 //匿名内部类对象 5 a.setListener(new MouseListener(){ 6 public void onClick(){ 7 System.out.println("单击了a按钮"); 8 }; 9 public void onDbClick();//双击事件 10 public void onRightClick();//右键事件 11 }); 12 a.click(); 13 14 Button b=new Button(); 15 //匿名内部类对象 16 b.setListener(new MouseListener(){ 17 public void onClick(){ 18 System.out.println("单击了b按钮"); 19 }; 20 public void onDbClick();//双击事件 21 public void onRightClick();//右键事件 22 }); 23 b.click(); 24 25 } 26 27 }
通过3.1和3.2的对比,在多个按钮实现相同操作的时候,须将接口中的每个方法都得实现,代码量大而且冗余,故可使用适配对象先实现接口;
//4.创建适配对象
1 //创建一个没有抽象方法的抽象类对鼠标监听接口进行空实现 2 abstract MouseAdapter() implements MouseListener { 3 public void onClick(){}; 4 public void onDbClick(){}; 5 public void onRightClick(){}; 6 }
//5.运行
5.1创建单个按钮实现单击操作
1 class Adapter(){ 2 public static void main(String args[]){ 3 Button a=new Button(); 4 //匿名内部类对象 5 a.setListener(new MouseAdapter(){ 6 public void onClick(){ 7 System.out.println("单击了a按钮"); 8 }; 9 }); 10 a.click(); 11 } 12 }
5.2创建多个按钮实现不同操作
1 class Adapter(){ 2 public static void main(String args[]){ 3 Button a=new Button(); 4 //匿名内部类对象 5 a.setListener(new MouseAdapter(){ 6 public void onClick(){ 7 System.out.println("单击了a按钮"); 8 }; 9 }); 10 a.click();//单击 11 12 Button b=new Button(); 13 //匿名内部类对象 14 b.setListener(new MouseAdapter(){ 15 public void onDbClick(){ 16 System.out.println("双击了b按钮"); 17 }; 18 }); 19 b.dbClick();//双击 20 } 21 }
通过5.1和5.2的对比,在多个按钮实现不同操作的时候,不必将接口中的每个方法都得实现,需要什么方法实现什么方法;