gpt4 book ai didi

java - 在 super() 之前调用子属性?

转载 作者:行者123 更新时间:2023-12-04 02:54:16 26 4
gpt4 key购买 nike

我主要使用动态语言 - 我刚刚开始使用 Java,但我正在为静态模式而苦苦挣扎。

据我了解,子类的构造函数中的第一个调用必须是其父类。很好,但是我需要在父级的构造函数中引用的子级中设置实例变量……当然,这会创建一个 catch-22。 (在调用parent之前需要先在child中设置变量,而在child中设置变量之前需要先调用parent)。

我确定我正在打破某种静态语言模式或法律...我只是不确定是哪一个,或者如何重新设计它。任何帮助表示赞赏。下面的精简示例:

Class Race {

public Race(Venue event_venue) {
greeting();
}

public void greeting() {
String event_greeting = String.format("The next event is: %s", getName());
System.out.println(event_greeting);
}

public String getName() {
return getClass().getSimpleName();
}
}

Class Sprint extends Race {
private int event_distance;

public Sprint(Venue event_venue, int distance) {
// super has to be the first call
super(event_venue);
// but I need to set event_distance to reference getName() in parent constructor
setDistance(distance);
}

public String getName() {
String sprint_name = String.format("%s meter sprint", Integer.toString(getDistance());
return sprint_name;
}

public int getDistance() {
return distance;
}

public void setDistance(int distance) {
event_distance = distance;
}
}

最佳答案

你的构造函数有副作用,这是不受欢迎的。为了获得最佳结果,请将副作用放在其他方法中。你已经有了这个,所以只需在 javadoc 中指定 greeting() 应该在构造后调用(或者,它可以由子类构造函数调用,但是子类将有同样的问题) .

关于java - 在 super() 之前调用子属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17828747/

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