gpt4 book ai didi

Java:当 super 构造函数需要参数时如何初始化 child

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:53:31 25 4
gpt4 key购买 nike

我有

class A {

int var;
public A(int x) {
var = x;
}
}


class B extends A {
int var2;

public B(int x, int y) {
super(...);
var2 = y;
x = f(y);
}
}

对于子类 B,我需要计算在 A 的构造函数中使用的值 x。如果我可以自由地将 super 移动到我的 x=f(y) 然后我可以将结果传递给 A (super) 的构造函数。但是 super 必须是 B 的构造函数中的第一行。

有什么方法可以在第一次用正确的值初始化 A 吗?如果 A.var 是最终的并且我无法在构造后返回并更改它怎么办?

当然,我可以放置 super(f(y)),但我可以想象这会变得困难的情况。

最佳答案

假设 var 是私有(private)的并且您需要使用构造函数设置值(这似乎是问题的重点,否则有很多简单的解决方案),我只会用静态的类似工厂的方法来完成。

class B extends A {
int var2;

public static B createB(int x, int y) {
x = f(y);
return new B(x, y);
}

public B(x, y) {
super(x);
this.var2 = y;
}
}

类似的东西。您别无选择,因为显式构造函数调用必须发生在包装构造函数的第一行。

关于Java:当 super 构造函数需要参数时如何初始化 child ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11786632/

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