说我定义以下内容:
class A {
def foo() = println("A::foo")
}
implicit class Wrapper(a: A) {
def foo() = println("Wrapper::foo")
def bar() = println("Wrapper::bar")
}
val a = new A
a.foo()
a.bar()
A :: foo()是被调用的方法。隐式类有什么方法可以覆盖A中的默认实现?
答案 0 :(得分:4)
如果存在成员方法,则编译器would not search for implicit。如果不能通过继承进行覆盖,则可以考虑“翻转表”并像这样创建delegate
class A {
def foo() = println("A::foo")
def zar() = println("A::zar")
}
class Wrapper(val a: A) {
def foo() = println("Wrapper::foo")
def bar() = println("Wrapper::bar")
}
implicit def unwrap(wrapped: Wrapper): A = wrapped.a
val a = new Wrapper(new A)
a.zar() // A::zar
a.foo() // Wrapper::foo
a.bar() // Wrapper::bar