0
나는 하나의 추상적 인 방법으로 형질을 창조한다. 그런 다음이 특성을 사용하는 클래스를 만듭니다. 이 클래스에는, 오버라이드 (override) 된 메소드가 있습니다. 그래서이 코드는스칼라 : 형질의 추상적 인 방법
trait Logged {
def log(msg: String)
}
class A extends Logged{
def log(msg: String) {
println(msg)
}
def a(msg: String) {
log(msg)
}
}
val a = new A
a.log("jopa")
를 잘 작동하지만이 특성을 만들 때 체인 상황이 혼란스러워 :
trait Logged {
def log(msg: String)
}
trait TimestampLogger extends Logged {
abstract override def log(msg: String) {
super.log("huy: " + msg)
}
}
class A extends Logged with TimestampLogger {
def log(msg: String) {
println(msg)
}
def a(msg: String) {
log(msg)
}
}
val a = new A
a.log("jopa")
이 코드는 둘 다 overridden
로그 방식의 수정과 함께 작동하지 않으며, 아무것도 나는 시도했다. 무엇이 문제입니까?
'TimestampLogger'의'super.log'는 의미가 없습니다. 그것은 구현되지 않았습니다. –
@LimbSoup 그럼 어떻게 로그 계층 구조를 사용할 수 있습니까? 어떻게 그 로그 방법을 사용할 수 있습니까? – zapadlo
Logged에 기본 (그러나 추상적이 아닌) 정의를 원하지 않습니까? 그런 다음 하위 클래스에서 재정의 할 수 있습니다. –