新手问题 ruby 的 mixin 和 java 的抽象类与什么不同?

search · 2014年02月21日 · 最后由 huaoguo 回复于 2014年02月21日 · 2567 次阅读

ruby 的 mixin 是为了解决多重继承,java 的抽象类的作用是什么?有个同学说 mixin 和抽象类一样,没用过 java,求指教

Java 只能选择一个抽象类继承,但 Ruby 却可以多个 mixin 到某个类,其实 ruby 的 mixin 机制和 scala 的 trait 比较像。

你没用过 Java,怎么跟你说...Java 的抽象类=接口有了部分实现的方法

#2 楼 @huaoguo 还是懂一点的

#1 楼 @ericguo 我感觉 ruby 的 mixin 和接口有几分相似。

#3 楼 @search 你可以这么理解,接口就相当于是一种认证,比如教师资格证,无论是谁,就算你是只狗,只要有了教师资格证(狗类实现了教师接口),就有了教师的行为,被认为是合格的教师。而类继承则比较强大些,假如 B 继承自 A,则 B 不仅有 A 的接口,还默认有 A 的行为。打个不恰当的比方,老鼠的儿子生下来就会打洞,不用去考打洞证。而抽象类则相当于哺乳动物这个概念,哺乳动物有特定的行为,但却是抽象的(狗、猪、羊都是活生生的东西,称之为具体的,而哺乳动物则是一个抽象的概念。)所有继承自哺乳动物这个抽象类的类,都有哺乳动物的行为(哺乳),因为哺乳这个行为相当程度上过程和原理是一样的,所以可以把这部分代码写在哺乳动物类的默认实现里。但是狗、猪、羊还各有各的不同,这些不同的细节哺乳动物没办法决定,只能写成抽象方法让具体子类去实现。这就是抽象类的作用。不知道这么说你是不是晕了。

maxin 的功能则强大多了,直接实现了多继承,但是相对来说也容易出问题

需要 登录 后方可回复, 如果你还没有账号请 注册新账号