黑马程序员技术交流社区

标题: 实现与继承的关系 [打印本页]

作者: 狼王    时间: 2013-6-10 17:29
标题: 实现与继承的关系
本帖最后由 狼王 于 2013-6-10 18:38 编辑

实现就是继承,只是因为在java中,不支持多继承,于是利用接口,改良成多实现?
不知道这样理解是否正确,亲们?
作者: 小冰块    时间: 2013-6-10 17:45
本帖最后由 小冰块 于 2013-6-10 17:46 编辑

如果说接口和抽象类比较相似还可以理解,但是接口和继承直接就差得远了吧。
对于抽象类的继承你说的的确有一定的道理,但是对于普遍继承而言就不是这么回事了。

继承机制中父类和子类是有着is a的逻辑关系的,父类的非私有属性和方法会悉数授予子类。子类可以重写父类方法以便完成自己的特有功能。

但是接口并不是这样,接口中的抽象方法只是一个通用的标准,就像你主机里的PCI插槽,插槽无论何时都会存在,但你不一定要实现它,更不必说全部都要实现,只要找你需要用到得实现就可以了。

下面说说抽象类和接口的关系:

一个类可以(继承)实现多个接口,但只能继承一个类。接口中只能定义方法名,方法参数和返回值,以及静态变量。而抽象类中可以有方法的实现,也可以定义非静态的类变量。所以,当你需要多继承特性时,那你只能使用接口;当你需要在父类中实现部分代码(通用功能)而根据不同情况某一方法有不同的实现时,那就设计为抽象类。

抽象类主要用于关系密切的对象,而接口最适合为不相关的类提供通用功能。

一个基本原则是,首先考虑使用接口。接口可以继承接口。抽象类可以实现(implements)接口,抽象类是可以继承实体类,但前提是实体类必须有明确的构造函数。有个通用的设计思想,如果要设计小而简练的功能块,则使用接口。如果要设计大的功能单元,则使用抽象类。
作者: Jomes    时间: 2013-6-10 17:53
不是吧,继承父类,子类可以使用父类public 、protected 的属性和方法。java 只能继承一个父类,而C++可以多继承多个父类。但是java为了解决C++ 多继承所产生的问题,继承多个接口来处理。

作者: 李晓峰    时间: 2013-6-10 17:59
本帖最后由 李晓峰 于 2013-6-10 18:07 编辑

java中多现在确实弥补了多实现的局限性,但是不能理解为:实现就是继承。

可以试着在概念上理解:
      继承:多个类具有形同的属性和行为时,可以将这些功能的属性和行为提取到一个单独的类中,让多个类去继承这个单独类,无需在定义这些功能的属性和行为。
      实现:当抽象类中的方法都是抽象方法的时候,这个类就是一个接口。
      抽象类:多个类有相同的方法声明,但是方法体不一样。这个时候,我们考虑把方法声明进行抽取。让子类继承后,自己去实现方法体。


继承就像学生跟人的关系,接口就像电脑跟鼠标之间的关系。继承是可以将父类的功能直接拿来用或者复写属于自己的特有内容,实现是程序的扩展功能。


作者: 袁梦希    时间: 2013-6-10 18:10
如果问题已经解决,那么请把帖子的类型改为已解决{:soso_e181:}
作者: 狼王    时间: 2013-6-10 18:38
袁梦希 发表于 2013-6-10 18:10
如果问题已经解决,那么请把帖子的类型改为已解决

袁梦希,谢谢你的提醒以及技术分
作者: 狼王    时间: 2013-6-10 18:38
李晓峰 发表于 2013-6-10 17:59
java中多现在确实弥补了多实现的局限性,但是不能理解为:实现就是继承。

可以试着在概念上理解:

谢谢解答
作者: 狼王    时间: 2013-6-10 18:39
小冰块 发表于 2013-6-10 17:45
如果说接口和抽象类比较相似还可以理解,但是接口和继承直接就差得远了吧。
对于抽象类的继承你说的的确有 ...

小冰块,谢谢你的解答
作者: 狼王    时间: 2013-6-10 18:40
Jomes 发表于 2013-6-10 17:53
不是吧,继承父类,子类可以使用父类public 、protected 的属性和方法。java 只能继承一个父类,而C++可 ...

Jomes,谢谢你的解答




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