A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© qmlovewhr 中级黑马   /  2013-7-17 09:34  /  1677 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 杨兴庭 于 2013-7-17 21:23 编辑

在老毕的第22天视频中,提到窗口侦听器windowListener这样一个接口,里面有7个方法,关于窗口的最小化,最大化等7个方法的操作,可是为了实现一个新建窗口的关闭功能,为什么说因为只用到关闭功能,只覆盖关闭功能就可以,但是在这里需要覆盖7个方法,没有必要,然后找了WindowListener的一个子类WindowAdapter,在这里诺诺问一句,搞个类实现下WindwoListener这个接口,覆盖它其中关闭功能的方法不就行了吗,至于其它我了没用,就不管它不就行了吗,何必再找这个接口的子类,这样做有必要吗,为什么?

老毕视频中的原内容如下:

class Mywin implements WindowListener
{
    //覆盖7个方法,可是我只用到了关闭的动作。
   //其它动作都没有用到,可是却必须复写。
}
//因为WindowListener的子类WindowAdapter已经实现了WindowListener接口,并覆盖了其中的所有方法,那么我
//只要继承自WindowAdapter覆盖我需要的方法即可。

评分

参与人数 1技术分 +1 收起 理由
Sword + 1

查看全部评分

7 个回复

倒序浏览
亲,,那是接口啊,接口,接。。。。你实现一个方法有用吗
回复 使用道具 举报
薛淑凯 发表于 2013-7-17 09:57
亲,,那是接口啊,接口,接。。。。你实现一个方法有用吗

我只用其中一个方法呀,难道继承一个接口,他所有的方法我都要去复写吗?没用到那么多,难道也要构造个空函数方法?不明白
回复 使用道具 举报
首先你得明白接口的特性,而不是说我只用到接口中的某个方法,就只需要去实现某个方法,即使那些不用,你也需要去声明。
继承接口的子类将不得不实现这个接口所规定的方法,而其子类可以从此类自动继承这些方法,当然也可以选择置换掉所有的这些方法,或者其中的某一些方法。

评分

参与人数 1技术分 +1 收起 理由
Sword + 1

查看全部评分

回复 使用道具 举报
首先 WindwoListener 这个接口有7个方法 楼主已经知道。 但是如果象楼主说的 搞一个类只是实现其中关闭功能方法的话,而不管其他6个方法,那么这样做编译时是通不过的。
因为Java 中 实现接口的规则是:必须要全部复写接口中所有的方法,除非你搞的这个类是个抽象类。所以即使用不到其他的6个方法,至少也要给他弄个空的方法体搁那儿。
但是用WindwoListener 的子类WindowAdapter就不一样了。 因为WindwoListener 的子类WindowAdapter已经复写了WindwoListener 接口中所有的方法。 所以我们只用到关闭窗口这个方法的话,搞个类继承WindwoListener 接口的子类WindowAdapter,只复写其中关闭功能的方法即可,其他的方法真的可以什么都不用管,连简单的空方法体都不用写。
因为WindowAdapter已经实现了WindwoListener中所有的方法。

评分

参与人数 1技术分 +1 收起 理由
Sword + 1

查看全部评分

回复 使用道具 举报
qmlovewhr 发表于 2013-7-17 10:08
我只用其中一个方法呀,难道继承一个接口,他所有的方法我都要去复写吗?没用到那么多,难道也要构造个空 ...

那你可以试着只实现一个方法,看看结果怎么样
回复 使用道具 举报
戴振良 黑马帝 2013-7-17 10:52:20
7#
qmlovewhr 发表于 2013-7-17 10:08
我只用其中一个方法呀,难道继承一个接口,他所有的方法我都要去复写吗?没用到那么多,难道也要构造个空 ...

      接口里的所有方法都必须要实现的,这个是死规定了,没必要究结。
有个术语叫“空实现”,继承接口就必须实现所有接口的方法,但是方法里你没有写任何的处理代码,这叫“空实现”。
      所以老师说的实现一个方法,指的是你只需要在关闭的方法里面写关闭窗口的代码。而其他的方法不需要写处理代码,但必须得写空实现的。
      这样说不知能否明白。

评分

参与人数 1技术分 +1 收起 理由
Sword + 1

查看全部评分

回复 使用道具 举报
当然有必要,在学面向对象的时候就讲过,接口里的方法都是抽象方法,如果要使用抽象类的方法就必须定义个类去实现接口,接口里的方法在这个类里全都要重写,否则的话,有一个没重写那么这个也得是抽象的,没法调用的。。。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马