我想更改类的方法的执行方式,而不覆盖该方法,而仅覆盖(或理想地扩展)内部类。假设我无法更改需要执行此操作的事实(我正在修改现有的开放源代码库,因此拔出类或其他方法会遇到麻烦)。
public class A { static class Thing { public int value() { return 10+value2(); } public int value2() { return 10; } } public String toString() { Thing t = new Thing(); return Integer.toString(t.value()); } } public class B extends A { static class Thing { public int value2() { return 20; } } }
我的目标是通过仅更改Thing,使B的toString()返回“ 30”,当前在该位置将返回“ 20”。理想的情况是仅更改方法value2(从而使任何其他方法保持不变),但是我不知道这是否可行。
谢谢
我认为您需要一种工厂方法。考虑以下示例( 从您的代码段派生 ):
static class A { static class Thing { public int value() { return 10 + value2(); } public int value2() { return 10; } } protected Thing createThing() { return new Thing(); } public String toString() { return Integer.toString(createThing().value()); } } static class B extends A { static class Thing extends A.Thing { public int value2() { return 20; } } @Override protected Thing createThing() { return new Thing(); // creates B.Thing } } public static void main(String[] args) { System.out.println(new B()); }
输出:
30