ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

在 wrapper 类里实现重载方法

2026/8/3 9:27:08 拓冰建站 浏览量
在 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);}
}