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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 王光保 黑马帝   /  2011-7-17 19:50  /  2524 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

抽象类和接口两者是比较相似的,而且在类的设计中有这样的一个原则,一个类不要去继承一个已经实现好的类,只能去继承一个抽象类和实现接口。但是不是很清楚其二者在什么情况下使用?自己在写程序的过程中发现继承抽象类不是很多,而实现接口是比较多的,不会只是因为类的单继承的原因吧!
[ 本帖最后由 wangguangbao 于 2011-07-17  19:51 编辑 ]

评分

参与人数 1技术分 +2 收起 理由
admin + 2 这题问得很不错!

查看全部评分

4 个回复

倒序浏览
黑马网友  发表于 2011-7-17 23:17:47
沙发
抽象类被继承,是 is a 关系。 xx1是xx2中的一种。
接口可以被实现,是 like  a关系 xx1象xx2 中的一种。
继承父类,是给一个类定了性,龙生龙,凤生凤,老鼠的儿子会打洞,赋予了这个类最基本的功能。
而接口通常用于扩展类的功能,同样是龙的儿子,拥有最基本的腾云驾雾的功能和鳄鱼嘴、乌龟颈、蛇身、鱼鳞、蜃腹这些外表特征,但是水龙能喷水,火龙能喷火,这就是他们分别实现了含有喷火功能的接口,以及喷水功能的接口的原因。如果你既想喷水又想喷火,那就同时实现这两个接口,这就是多实现。

评分

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

查看全部评分

回复 使用道具 举报
黑马网友  发表于 2011-7-18 00:45:21
藤椅

回复 楼主 的帖子

你说的“一个类不要去继承一个已经实现好的类”没有根据吧。
java中javax.swing包中很多类都是继承的java.awt中的类(比如jframe继承了frame)
这些类都被实现的好好的
接口和抽象类确实很相似,因为接口的定义就是当抽象类中所有方法,变量也就成了常量,才是接口
但是继承抽象类或其他类的同时可以应用多个接口
这个不好解释,我就当这是java的独特设计,目的是为了弥补java的单继承性

举个例子,父类和子类就是父子,接口就是一个技能
儿子只能有一个生父,但是可能有很多技能

评分

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

查看全部评分

回复 使用道具 举报
黑马网友  发表于 2011-7-18 08:42:33
板凳

重思想

既然,抽象类和接口有着类似的作用,平时用接口的情况又比较多,那么继承的意义何在呢?

其实,OO(Object-Oriented)面向对象编程语言最开始只有继承,没有接口,所以只能以继承来实现抽象,但是,but~抽象的本意在于抽象而非代码重用(虽然继承却是也有这个作用)。抽象类是不能被实例化的,它仅仅提供一个模板而已,这也能说明问题。我们来看看,人们从Worker类、Teacher类中提取共性,向上抽取出一个Person类,这个类是抽象的,它不能被实例化,仅仅是一个模板,要是我们再有一个类Doctor类,他继承自Person类,我们就知道Doctor具有Person类的属性与方法,Worker类和Teacher类直观上也能看出他们具有Person类的特征。JAVA摒弃多继承是因为,假如实现了多继承的话,就体现不出这种思想了。我继承了Person类,又继承了Animal类,那么我到底还是不是人啊!!!
其实,实现接口之前我们的动机是为了多态,继承之前我们的动机是代码复用。

评分

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

查看全部评分

回复 使用道具 举报
黑马网友  发表于 2011-7-18 11:05:51
报纸
一般能不使用继承就不使用继承。尽管多态是面向对象语言的特色
会降低代码可读性
而一个类只能继承一个类,如果借口的话能实现多个  这是最主要的区别
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马