java中定义了很多监听器,来监听各类事件,如监听窗口事件的:WindowListener…这些监听器是采取接口形式来定义的.如图中WindowAdapter 接口中,有7个没有内容体的方法,需要调用者去实现…从目前来看.调用者要在按钮添加一个鼠标的单击事件方法,就必须实现WindowAdapter 中所有的方法,这样是不现实的.所以java 又定义了一个子类 WindowAdapter ----(接收窗口事件的抽象适配器类。此类中的方法为空。此类存在的目的是方便创建侦听器对象。图中有解释)
(如果要实现 WindowListener 接口,则必须定义该接口内的所有方法。此抽象类WindowAdapter 将所有方法都定义为 null,所以只需针对关心的事件定义方法。)
代码演示-----
//Event 类继承 抽象类WindowAdapter并重写所需要的方法
class Event extends WindowAdapter{
public void windowClosing(WindowEvent e){ //重写windowClosing
System.out.println("windowClosing方法");//加入具体处理方式
}
}
public class DEMO {
frame.addWindowListener(new Event()); //窗体添加一个窗体事件
}
可以将以上代码利用匿名内部类优化-----
frame. addWindowListener(new WindowAdapter(){ //创建适配器子类对象
public void windowClosing(WindowEvent e){
System.out.println("windowClosing方法");//加入具体处理方式
}
});
以后遇到一个接口中有很多种方法,但是你只想调用其中一种
- interface 接口中有多中方法
- 创建一个抽象适配器类重写接口中所有方法.所有方法都定义为null
- 最后就可以继承此抽象类来调用所需的方法/或用匿名内部类简化代码
代码演示----
//定义一个功能接口
interface Action{
public void run();
public void walk();
public void jump();
public void eat();
}
//定义一个抽象适配器类.重写接口中所有方法.方法体为null
abstract class ActionAdapter implements Action{
public void run(){};
public void walk(){};
public void jump(){};
public void eat(){};
}
class Person {
//功能:对人添加动作
public void addAtion(Action a){
a.run();
a.eat();
a.jump();
a.walk();
}
}
public class DEMO {
public static void main(String []args){
Person p=new Person();
p.addAtion(new ActionAdapter(){ //匿名内部类方式..建立适配器类对象直接调用所需功能
public void run(){
System.out.println("此人已添加 run 功能");
}
});
}
}