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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 马云 中级黑马   /  2012-3-20 13:11  /  7571 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

什么时候用继承什么时候用接口?

6 个回复

正序浏览
魏群 黑马帝 2012-3-20 14:20:19
7#
抽象类和接口代表的都是抽象类型,是抽象层的具体表现。
从语法层上看抽象类可以有自己的成员变量也可以有非抽象方法,而在接口中只有不能被修改的成员变量
(必须是static final的,不过在接口中一般不定义成员变量)所有的方法都是抽象的。从某种意义上说接口是一种特殊的抽象类。
从编程角度看抽象类和接口可以实现一样的功能。带还是有区别的。抽象类是java中表示一种单个继承的关系一个类只能有一个父类。却可以实现多个接口。在抽象类的定义中可以实现部分方法其继承并不要求实现所有的抽象方法。但在接口中所有的方法只有声明。所有实现都是在子类中完成的。这会造成维护上的麻烦。(如果后来想改进接口的功能适应新的情况,就会很麻烦)如果是抽象类的话,那么只需要修改定义在抽象类中的默认行为就可以了。
从设计层看抽象类偏向于说明属性而接口说明的是功能。
比如说我有一把会报警的锁。虽然他有报警功能但本质上他还是一把锁。我就可以继承锁的抽象类。实现报警的接口。
java接口是定义混合类的理想工具,混合类表明一个类不仅仅具有某个主类型的行为,而且具有其他的次要行为。
结合抽象类和接口的各自优势,可以得到最理想的设计实现方式:声明类型的工作仍然有java接口承担,但同时给出一个实现了这个接口的实现类,其他同属于中个抽象类的具体类可以选择实现接口,也可以选择继承整个抽象类,也就是说在层次结构中接口在最上面,紧跟着的是抽象类,这样两个抽象的功能的优点都发挥了出来。这就是"缺省适配模式",在API中就使用了这种模式。
回复 使用道具 举报
本帖最后由 谢明 于 2012-3-20 13:32 编辑

继承体现 代码的重用 不必重新开发 java为单继承

避免了多继承带来的安全隐患

而用多实现的形式代替 多继承  接口可以被多实现

接口定义的是一种规范 而不实现任何方法和属性
回复 使用道具 举报
接口就跟U盘的USB接口一样,可以插拔。。
当你要完成一个功能的时候,两个事物联系不大,可以用接口。
抽象类着重继承关系。如果两个东西可以看成继承关系,用抽象类。
你要弄一个有警报器的门。
你可以定义一个抽象door类,门有close和open的方法。也定义到这个抽象类里。
但这个警报器,跟门一般关系不大。。所以,你可以用接口.

然后这个带警报器的门就可以是继承door这个类并实现警报器接口。
回复 使用道具 举报
接口就好象USB接口,无论什么PC甚至其他设备只要有这个口,都可以插U盘,大家只会说是带有USB接口的电脑,而不会叫它为某某USB.

继承以汽车打比方,不管你是轿车卡车公汽,但是你核心都是由发动机轮子方向盘.....构成的,所以大家都可以叫汽车.都是继承自汽车
回复 使用道具 举报
本帖最后由 叶绍亮 于 2012-3-20 13:22 编辑

接口扩展了类的功能,它支持多重继承,同时又不会破坏类的继承体系,相当于在原有体系的基础上扩展出更多的功能。接口更多的是在系统架构设计方法发挥作用,主要用于定义模块之间的通信契约。
继承则体现了代码的重用,体现了模块化的软件思想,更多的是一种“is-a”关系,
回复 使用道具 举报
使用继承主要是为了不必重新开发,并且在不必了解实现细节的情况下拥有了父类我所需要的特征。但是很多时候,一个子类并不需要父类的所有特征,它可能只是需要其中的某些特征,但是由于通过继承,父类所有的特征都有了,需要的和不需要的特征同时具备了。而那些子类实际上不需要用到的,有时候甚至是极力避免使用的特征也可以随便使用,这就是继承的副作用。特别是允许多重继承的OO语言中,很容易引起不容易发现的错误。这个时候如果使用接口,就会避免继承的副作用。
使用接口,抽象类都是为了多态,让一个类有一些共同的属性,方法,方便向上转型。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马