在 wrapper 类里实现重载方法
现有包装类 Wrapper 欲覆盖 inner 的方法 g
class A{
void f(){
g();
}
void g(){
}
}
class Wrapper extends A{
A inner;
void f(){
inner.f() // 不调用 Wrapper.g
}
void g(){ // override g
}
}
inner 通过 this.g 调用时仍然会调用 A.g 而不是 Wrapper.g 导致覆盖失效。
现在想到一个好办法, 我将 f 改为 f(A self):
class A{
void f(A a){
a.g();
}
void g(){
}
}
class Wrapper extends A{
A inner;
void f(A a){
inner.f(this) // 不调用 Wrapper.g
}
void g(){ // override g
}
}
为了让 A 原来的用户舒服:
class A{
void f(){
this.f(this);
}
}