Scala类继承和方法参数

时间:2016-07-27 18:33:35

标签: java scala oop

在Scala中,我希望拥有以下特征和类

trait Paper {
    def paint(args: Material): Unit
}

class WhitePaper extends Paper {
    override def paint(args: DarkMaterial): Unit = {
        darkMaterials.open()
    }
}


trait Material {
   def open() : Unit = {}
}

class DarkMaterial extends Material{
   override def open() : Unit = {
       print("Dark material")
   }
}

但是,我的IDE显示覆盖方法paint(args:DarkMaterial)的错误,即使DarkMaterial扩展了Material。为什么这是错的?任何人都知道如何解决它?

非常感谢你。

1 个答案:

答案 0 :(得分:1)

你可以使用类型参数来解决问题。

trait Paper[M] {
  def paint(args: M): Unit
}

class WhitePaper extends Paper[DarkMaterial] {
  override def paint(args: DarkMaterial): Unit = { // "override" not needed
    args.open()
  }
}
// Material and DarkMaterial are unchanged