我主要使用动态语言 - 我刚刚开始使用 Java,并且正在为静态模式而苦苦挣扎。
据我了解,子类的构造函数中的第一个调用必须是其父类。没关系,但是我需要在父项的构造函数中引用子项中的实例变量……当然,这会创建一个 catch-22。(需要在调用父级之前在子级中设置变量,但在子级中设置变量之前需要调用父级)。
我确定我正在打破某种静态语言模式或法律......我只是不确定是哪一个,或者如何重新设计它。任何帮助表示赞赏。精简示例如下:
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;
}
}