【发布时间】:2017-09-11 14:02:59
【问题描述】:
我在网上了解到 Scala 中的 Traits 是
可以提供具体成员的接口
这意味着,特征是接口,我们可以在接口中为方法提供主体。我在这里有一个简单的查询,如果这可能比我下面的代码显示错误的原因:
错误:(6, 8) 对象 Car 继承了冲突的成员:方法 startEngine 在 trait Vehical 类型 => 单元和方法 startEngine 在 trait Motor of type => Unit 中(注意:这可以通过 在对象 Car 中声明一个覆盖。)对象 Car 扩展了 Vehical 电机{
trait Vehical {
def startEngine : Unit = {
println("Vehical Start")
}
def stopEngine
}
trait Motor {
def startEngine : Unit = {
println("Motor Start")
}
def stopEngine
}
object Car extends Vehical with Motor {
override def stopEngine : Unit = {
println("Stop Engine")
}
def main(args: Array[String]): Unit = {
Car.startEngine
Car.stopEngine
}
}
作为一名 java 开发人员,我不会在接口内部提供 body,但 scala 特性允许这样做。如果特征不是接口,那么我会将它们视为抽象类,这意味着 scala 中不允许使用接口。
另外请告诉我如何解决这个歧义问题。如果同一方法在多个特征中可用,我如何在子类中使用我的 startEngine 方法。
【问题讨论】:
-
非常清晰,谢谢。你能告诉我是什么使创建特征。我的意思是当我们有接口和抽象类时为什么要使用 Traits。
-
嘿,我现在才看到这条评论。 @Yuval 提供了一个很好的答案,我认为您上面的问题现在已被弃用:)