0
私は2つの特性と1つのクラスを持っています。トレイトA
ではScalaのメソッドをオーバーライドできません
、両方の方法A1
とA2
はA1
が、ここで実装それはスーパー使用すると、それは抽象的である必要があり、それはまだインスタンスクラスで実装を必要とされていても、トレイトB
で
scala> trait A {
| def A1
| def A2
| }
defined trait A
実装が必要。 A2
は、私は今、私はタイプC
であるべきオブジェクトC1
を作成したい
scala> class C {
| def A1 = println("C")
| }
defined class C
(以前の特性に関連していない)A1
を定義するクラスC
を持っているが、私はいくつかをしたい今
scala> trait B extends A {
| abstract override def A1 = {
| super.A1
| }
| def A2 = println("B")
| }
defined trait B
を実施しています
B
の機能性(例えば、
A2
)。しかし、それはコンパイルされません。
C
に
B
の
A2
を使用するにはどうすればよいですか?
C
は既に
A1
を実装しているので、うまくいくはずです。
scala> val c1 = new C with B
<console>:13: error: overriding method A1 in class C of type => Unit;
method A1 in trait B of type => Unit cannot override a concrete member without a third member that's overridden by both (this rule is designed to prevent ``accidental overrides'')
val c1 = new C with B
^