gpt4 book ai didi

java - 如何从子类覆盖/扩展内部类?

转载 作者:IT老高 更新时间:2023-10-28 20:55:49 25 4
gpt4 key购买 nike

我想更改类的方法的执行方式,而不覆盖该方法,并且只覆盖(或理想地扩展)内部类。假设我无法改变我需要这样做的事实(我正在修改现有的开源代码库,并且在提取类或诸如此类时会有摩擦)。

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

关于java - 如何从子类覆盖/扩展内部类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7588091/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com