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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

网上看到一个门和报警器的例子:定义了一个报警器的接口,但是Alarm方法是抽象的啊?不同的类实现了它,每个类岂不是也要自己重新写方法体?比如A型门是哔哔的报警,B型门是嗷嗷的报警,C型也是哔哔的报警,但是又有别的更多的功能;每次要自己重写方法体还是很麻烦啊,那接口易于维护的优点到底体现在哪里啊?有什么办法直接让一个类带上本身就写好的方法体,从而提高扩展性么?比如让一个门直接哔哔的报警?

interface Alram {
    void alarm();
}

abstract class Door {
    void open();
    void close();
}

class AlarmDoor extends Door implements Alarm {
    void oepn() {
      //....
    }
    void close() {
      //....
    }
    void alarm() {
      //....
    }
}


10 个回复

倒序浏览
接口是一个统一的规范,定义了某些必须的行为。代码中可以使用接口类型的引用,指向具体实现它的类的对象。这样,当你想使用其它类型的对象时,可以只修改该引用的赋值语句。
回复 使用道具 举报
个人观点:接口中的抽象方法只定义了最初的规范,好比刚写程序,要先写思路。脑袋乱的时候回头看一下思路,再把具体的方法补足........接口叫做接口是因为里面太抽象.....再好比人去学习动物界,界门纲目科属等是它的分类,少了这些定义,动物界就会很混乱...毕向东老师JAVA基础视频讲接口也是用动物的分类来讲,个人觉得这是比较容易接受的解释了
回复 使用道具 举报
应该还是封装的思想吧
回复 使用道具 举报
接口是一种公共的功能规范,他只声明这种功能是在做什么,而具体怎么做就没有体现,所以需要子类去实现方法。
至于接口提高可维护性:
如果是用类来实现这种功能,如果某个类要改变或者增加某些属性或者功能时,而他的子类都不需要这些功能,就需要大量的去改变子类的代码,当这个继承体系中成员越多时,需要改变的地方也就越多。而如果是用接口,就只需要把那个需要的类中的代码改变下就行了,这就提高了可维护性。

如果要让父类一种方法就搞定所有子类,那就只能是他们的叫声都一样,不然当子类拥有特殊的叫声时,都要重写父类的方法。
回复 使用道具 举报
接口->规范,总纲->向外提供服务(以方法形式)->不应经常改变(因为接口的修改对系统有辐射式的影响。)
回复 使用道具 举报
在多个应用当中使用接口时,接口是多个程序之间的通信标准

而抽象类:
抽象类->模板->抽象父类:中间产品
实现系统部分功能,进一步完善可能有几种不同的方式
回复 使用道具 举报
我觉得还有一点比较重要:接口解决了一个类只能有一个抽象父类的问题。但这又不同于C++中多继承带来的复杂度,一个类可实现多个接口,而接口是比较好维护的(我个人的理解)
回复 使用道具 举报
hsx500 中级黑马 2015-5-15 08:40:05
9#
严晗哲 发表于 2015-5-14 22:05
接口是一种公共的功能规范,他只声明这种功能是在做什么,而具体怎么做就没有体现,所以需要子类去实现方法 ...

嗯!说的很对~!
回复 使用道具 举报
接口解决了单继承存在的不足,
回复 使用道具 举报
学习了,说的真好。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马