在 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);
	}
}
posted @ 2025-10-20 20:26  Inshua  阅读(0)  评论(0)    收藏  举报