0
2 개의 특성과 1 개의 클래스가 있습니다. 특성 A
에서스칼라에서 메서드를 재정의 할 수 없습니다.
, 두 가지 방법 A1
여기에 구현되어 있지만 특성 B
에서
scala> trait A {
| def A1
| def A2
| }
defined trait A
는, 그것이 슈퍼 사용하고 여전히 인스턴스 클래스의 구현을 필요로 추상적 할 필요가 A1
및 A2
필요 구현 . 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
). 그러나 컴파일되지 않습니다.
B
의
A2
을
C
에 어떻게 사용할 수 있습니까?
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
^