【讨论】接口继承和类继承(又叫实现继承)的区别,实现原理?
我先说:
1 类继承用是严格按照分类学的标准,父类的所以接口暴露给子类,子类不仅继承接口,也继承代码。父类的改变,需要子类重新编译,属于编译实链接。
2 接口继承其实就是接口契约,模块的改变,只要不改变接口,调用模块的其他模块都不需要重新编译。
实现原理上,有人说纯虚函数就是接口,我总感觉不妥。
企盼大虾浮现!
问题点数:50、回复次数:12Top
1 楼mofeir(损人专家)回复于 2005-07-05 09:47:41 得分 3
看jvm去,你就会知道一点。呵呵Top
2 楼rower203(华仔)回复于 2005-07-05 09:48:16 得分 3
纯理论研究。Top
3 楼yangbc(土豆块)回复于 2005-07-05 10:13:49 得分 6
一会接口一会类,能不能固定一下你对他们的称呼
父类如果只改变了方法的实现,子类还用重新编译么
接口继承?那你只谈了接口和接口之间的事
又:就算你改变了接口,比如减少方法实现,也是不需要重新编译实现类
Top
4 楼yangbc(土豆块)回复于 2005-07-05 10:25:45 得分 2
还有,虚函数就是接口,又有什么不妥了Top
5 楼baryjim(吃饭-睡觉-打豆豆)回复于 2005-07-05 14:22:51 得分 0
纯虚函数才能是接口吧Top
6 楼midthinker(呵呵)回复于 2005-07-05 14:55:35 得分 8
建议,你可以从以下书中获得非常详细的有关于接口继承与实现继承的关系,区别,优劣以及取舍。
《Thinking in java》:第三版,6、7、8章,最为详细通透的阐述了JAVA中关于复用的概念,其中通过许多详实的代码示例解释了面向对象中继承关系的JAVA实现形式。
《JAVA与模式》:最精简的阐述了接口继承与实现继承的区别,以及他们的优劣,并说明了在合适的情况下对二者的取舍。(第5章,专题:JAVA语言的接口;第6章,专题:抽象类)
《Effective Java》:以大师的眼光阐述了许多接口继承与实现继承的技术细节与注意事项。(第4章,类和接口)
当然你也可以从许多其他书中获得详细资料(尤其是JDK Document),祝你好运 ^^
@.@||~Top
7 楼baryjim(吃饭-睡觉-打豆豆)回复于 2005-07-06 09:02:01 得分 0
同继承一个接口的子类群体与同继承一个父类的子类群体在表现上差不多,但是在被使用的时候却显现出一些不同。
同继承一个接口的子类群体,只是说这组操作(接口定义)可以互相实现替代。接口是一种角色,实现接口的类是这个角色的具体扮演者。
同继承一个父类的子类群体,也具有上述的功能,但是子类不仅仅是父类代表的角色,应该是父类这个演员特性的继承。
不知道我说得对否?Top
8 楼baryjim(吃饭-睡觉-打豆豆)回复于 2005-07-06 09:03:29 得分 0
如果说接口继承继承下来的是角色,那么子类继承应该是演员的继承吧,她不仅继承了父类的角色,也继承了父类对这个角色的演绎,对吗?Top
9 楼midthinker(呵呵)回复于 2005-07-06 23:35:13 得分 8
哈哈,一时也不知道该如何回答你了,仔细的阅读了两遍您的理解,感觉您对事物的理解与解释还真是有一套啊。
虽然我无法给您最确切的答案(这个问题太抽象了,应该交给哲学家),不过个人感觉您说对了大半,有个地方还是应该改正一下。
也许是我的理解有问题,您这里“那么子类继承应该是演员的继承吧,她不仅继承了父类的角色,也继承了父类对这个角色的演绎”中,关于继承了父类角色的演绎(演绎可以理解为动作、方法或过程吧),我认为出于对象中的访问控制问题,其实子类继承了父类的角色,以及父类公有的和保护类型的field && method,但父类中不愿意让儿子知道的一些演绎手法则无法被子类继承与访问。(多少还是要给父亲他老人家留点底的吗,HOHO~~~)
@.@||~
Top
10 楼njwangchuan(川儿)回复于 2005-07-09 23:11:52 得分 8
根据我的理解,由于JAVA不支持多类继承,所以有些功能必须要同过接口实现.还有一点,java中的接口有的时候还可以起到C++中模版的作用.再编写方法的时候,有的时候不必要写出参数的具体类,而用该类实现的接口代替,如排序中的Comparable接口,等等Top
11 楼interhanchi(on the Java Road)回复于 2005-07-09 23:42:56 得分 4
java真正实现多重继承还是依靠内部类来实现的.
Top
12 楼humanity(城市边缘的狼)回复于 2005-07-10 01:19:11 得分 8
只包含 纯虚函数的类才称为接口 , 接口和抽象类 都是 类 ,只是特殊形式 , 纯虚函数是函数 。
2中函数都包含的类是抽象类。
在 Java 中 如果 类 被定义成 非 final 类,并且 方法也没有 final 修饰符 那么这个方法就是个 虚方法 ,可以覆盖 ,如果类 被定义成 final ,就不可以被继承,所有的成员方法都是 final 的,编译器可以 inline 展开处理。
Java 类执行时 需要用到时 JVM 才用 ClassLoader 来加载一个类的 bytecode , 如果没有用到就不会加载, 也就不存在 链接 的问题 , 实现类修改了 ,调用端也不用重新编译 , 只需要让 JVM 重新加载 修改过的类的 字节码 就行了。
Top




