Scala 无miixn遗传性状的访问方法
假设我有这样一个案例:Scala 无miixn遗传性状的访问方法,scala,inheritance,Scala,Inheritance,假设我有这样一个案例: object Sample02 { trait A { def lit = "a" } trait B extends A { def add = lit + " + " + lit } trait C extends A { def sub = lit + " - " + lit } def main(args: Array[String]) { class BA extends B class
object Sample02 {
trait A {
def lit = "a"
}
trait B extends A {
def add = lit + " + " + lit
}
trait C extends A {
def sub = lit + " - " + lit
}
def main(args: Array[String]) {
class BA extends B
class CA extends C
val ba = new BA
val ca = new CA
我试过这个:
val ls = List(ba, ca)
for (l <- ls)
println(l.lit) //here i can't call "add" and "sub" methods
我关心的是,我是否可以避免“菱形”继承,以便访问三个类中的所有方法——更具体地说:没有mixin特征,但使用类?
List(ba,ca)
是一个List[a]
,但是如果列表中的类型有它们,您想访问B
和C
的方法吗?或者什么?我在列表中列出了这两个实例,我可以通过只使用一个标识符来访问它们的方法l
——所以忽略我的trued
部分。我想举例说明mixin最后提供了什么:类BC用C扩展了B
在这里你真的没有选择,只能混合这两种特性。编译器需要能够证明对象既是B
又是C
,才能访问这些方法。你有什么理由不想把这两种性格混在一起,比如两者之间有明显的冲突吗?@m-z,其中一个原因是,我有一些特性不会覆盖同名的方法,每当我混合这些特性时,我需要在它们上面添加另一个特性,或者告诉它们相互覆盖,它们被覆盖的顺序也很重要。我想对混合了它们的课程做点什么:(
class BC extends B with C
val bc = new BC
bc.lit
bc.add
bc.sub
}
}