gpt4 book ai didi

java - super(new Something(...)) 这个结构有错吗?

转载 作者:行者123 更新时间:2023-12-04 05:08:14 25 4
gpt4 key购买 nike

我正在查看一些 Java 代码,其中类的构造函数如下所示:

public class X extends ... {
X(String s) {
super(new Y(s));
}
}

那总是错的吗?
换句话说,它是否在构造函数中创建了一个对象以将其传递给“ super ”总是错误的?如果是这样,为什么?

编辑:
为什么我认为它可能是错误的?

创建类 X 时,jvm 做的第一件事就是在其父类(super class)上调用 super。
(即使隐含了 'super()' 也这样做了)
您只能执行有限数量的操作,例如 super(new Y(s));也许用三元运算符调用 super super( s != null ? new Y(s) : new Y() )但是您将无法再添加任何逻辑,因为必须首先调用 super !!!
这就是为什么我认为这是错误的

最佳答案

不,它并不总是错的。子类锁定父类(super class)允许您在构造函数中指定的内容是完全有效的。

重新编辑:

...but you would not be able to put more logic because calling super...



这是真的,而且这是 Java 编程语言的一个限制(我怀疑是故意的),但这并不意味着创建一个传递给 super 的对象总是错误的。 .

如果您愿意,您可以通过定义一个静态函数来绕过该限制,该函数返回您需要传递给 super 的内容。并调用它:
super(makeTheThingYouNeed());

那时,我肯定会在使用它之前仔细检查这真的是我最好的行动方案。但只需创建一个专门将其传递给 super 的对象?根本不是问题。

关于java - super(new Something(...)) 这个结构有错吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15229941/

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