如果我说得对,那么在具有 trait mechanizm 的 scala 中几乎不可能,这就像接口一样,您可以在某些类中混入,但可能包含代码,因此您无需在使用它们时一直重写抽象方法。
trait Stackoverflow {
val foo = "FOO"
}
trait MetaStackoverflow {
val bar = "BAR"
}
class User(val name: String)
现在在 REPL:
scala> val u = new User("jjmontes") with Stackoverflow with MetaStackoverflow
//u: User with Stackoverflow with MetaStackoverflow = $anon$1@8825a5
scala> u.bar
//res0: java.lang.String = BAR
scala> u.foo
//res1: java.lang.String = FOO
或者像这样:
scala> class UserA(name: String) extends User(name) with Stackoverflow
//defined class UserA
scala> val u = new UserA("jjmontes")
//u: UserA = UserA@1aecf45
scala> u.foo
//res8: java.lang.String = FOO
scala> u.bar
<console>:12: error: value bar is not a member of UserA
u.bar
Scala 与 Java 几乎完全互操作(除了一些罕见的情况,它仍然具有互操作,但很痛苦)。