scala – mixins和继承有什么区别?
我试图在
scala的背景下了解Mixins.特别是我想知道继承概念和Mixins的区别.维基说,mixins和继承的概念有重要的区别,因此我想了解它.
Mixin在wiki中的定义说: mixin类作为父类,包含所需的功能.然后,一个子类可以继承或简单地重用此功能,但不能作为专业化的手段.通常,mixin将会将所需的功能导出到子类中,而不会创建一个单一的“是”关系.这里是mixins和继承的概念之间的重要区别,因为子类仍然可以继承父类的所有功能,但是,不必一定应用关于子对象“作为一种”父语义的语义. 在上述定义中,我无法理解粗体字.这是什么意思 >一个子类可以继承mixin中的功能,但不能作为专业化的手段 预先感谢上述的任何澄清. 解决方法
我不知道我是否正确地理解了你的问题,但是如果我这样做,你会问一些事情可以继承而没有真正意义上的继承.
但是,Mixins不是继承的 – 它实际上更像是将一组方法动态添加到对象中.而继承说“这是另一回事”,mixins说:“这个对象有一些这样的特征.”您可以在关键字中看到这一点,用于声明mixins:trait. 公然从斯卡拉主页窃取一个例子: abstract class Spacecraft { def engage(): Unit } trait CommandoBridge extends Spacecraft { def engage(): Unit = { for (_ <- 1 to 3) speedUp() } def speedUp(): Unit } trait PulseEngine extends Spacecraft { val maxPulse: Int var currentPulse: Int = 0 def speedUp(): Unit = { if (currentPulse < maxPulse) currentPulse += 1 } } class StarCruiser extends Spacecraft with CommandoBridge with PulseEngine { val maxPulse = 200 } 在这种情况下,StarCruiser不是CommandoBridge或PulseEngine;然而,它有它们,并获得了这些特征中定义的方法.它是一个航天器,正如你可以看到的,因为它从该类继承. 值得一提的是,当一个特征扩展一个类时,如果你想要创建一些具有这个特征的东西,它必须扩展该类.例如,如果我有一个狗狗,我不能有一个狗与PulseEngine,除非狗扩展航天器.这样做不太像添加方法;然而,它仍然是类似的. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |