黑马程序员技术交流社区

标题: 求高人帮助:在创建创建窗口监听器时候为什么不能直接用WindowListner啊? [打印本页]

作者: 潜伏    时间: 2013-12-3 08:33
标题: 求高人帮助:在创建创建窗口监听器时候为什么不能直接用WindowListner啊?
WindowListener既不是抽象类。里面的方法也不是抽象的,为什么不能直接在addListener(new WindowListener)n呢??郁闷之极?毕老师再讲课的时候说他的方法是抽象的,很明显有问题啊
作者: 汪洋大海    时间: 2013-12-3 09:19
同学你好。
接口 WindowListener
在包awt.event 中。


作者: 天ya~_琼楼    时间: 2013-12-3 09:49

WindowListener属于接口。
接口的初期理解,可以认为是一个特殊的抽象类。当抽象类中的方法都是抽象的,那么该类可以通过接口形式表示。
反过来说就是:接口是抽象类,而且内部的方法全部是抽象的。
API对WindowsListener的解释是:用于接收窗口事件的侦听器接口。旨在处理窗口事件的类要么实现此接口(及其包含的所有方法),要么扩展抽象类 WindowAdapter(仅重写所需的方法)。
咱们使用WindowsListener时必须实现此接口,包括其内部的7个方法全部都要实现,而WindowAdapter已经实现了所有的方法,其存在的目的是方便创建侦听器对象。扩展此类可创建 WindowEvent 侦听器并为所需事件重写该方法。(如果要实现 WindowListener 接口,则必须定义该接口内的所有方法。此抽象类将所有方法都定义为 null,所以只需针对关心的事件定义方法。)也就是说调用WindowAdapter内部的方法时,可以定义方法。这样就比较方便。比如:
  1. private void myEvent()
  2.         {
  3.                 f.addWindowListener(new WindowAdapter()
  4.                 {
  5.                         public void windowClosing(WindowEvent e)
  6.                         {
  7.                                 System.exit(0);
  8.                         }
  9.                 });
  10. }
复制代码


作者: 想你的夜    时间: 2013-12-4 23:46
这个郁闷的原因是你还没有真正理解接口的概念吧, WindowListener就是java.awt.event中
接口,下面再把接口的概念给你叙述一遍:
   Java中的接口是一些方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的功能,但是用到接口的类必须继承接口,并且去具体的实现其中的方法。例子:
//定义一个接口Demo, 这个接口只定义两个方法,
interface Demo {
        void close();

        void opean();

}

//Mydemo继承接口并实现具体的两个方法
public class Mydemo implements Demo {

        public void close() {

                System.out.println("关闭");

        }

        public void opean() {
                System.out.println("打开");
        }

}

如果你理解了接口,就是你看错了把
WindowListener当作不是接口,但是实际上WindowListener是java.awt.event中接口的,不知道我说的你理解没有
作者: HAnG    时间: 2013-12-5 00:16
什么叫接口,就是里面的方法全是抽象,不能实例化。
类WindowAdapter就是把接口WindowListener里的方法全重写成空函数了,所以可以实例化。
这样你只需要用到监听器里1~2个方法时就用Adapter,而不使用需要重写7个方法的Listener。

我发现我言简意赅的回答总拿不到技术分{:soso_e167:}。
作者: 简★零度    时间: 2013-12-5 22:59
下次问题解决了就把类型改成提问结束!谢谢!




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2