gpt4 book ai didi

java - 使用影响 super 构造函数的变量调用子类构造函数

转载 作者:行者123 更新时间:2023-12-02 01:07:49 25 4
gpt4 key购买 nike

我正在尝试创建一个扩展抽象类 Animals 的 Mammals 类,该类可以从 main 方法中调用,并使用 int 确定 String 物种包含的内容。但是,在下面的代码中,整数不会以任何方式影响 String,因为对 super 构造函数的调用必须成为子类构造函数中的第一个语句。如何使用“实际化”字符串再次调用 super 构造函数?我已经尝试在子类中创建一个重载构造函数并首先调用它,但这似乎不起作用。

public abstract class Animals {
protected String species;
public Animals(String species) {
this.species = species;
}
}
class Mammals extends Animals{
static String species;
public Mammals(int speciesNumber) {
super(species);
if(colorNumber == 0){
species = "Dog";
}
else if(speciesNumber == 1){
species = "Cat";
}
else if(speciesNumber > 1){
species = "Horse";
}
}
}

最佳答案

一旦你传递了一个值,你就传递了它。稍后更新该值不会影响您之前赋予它的值。不过很容易修复:

class Mammals extends Animals {
public Mammals(int speciesNumber) {
super(toSpeciesName(speciesNumber));
}

private static String toSpeciesName(int speciesNumber) {
// your if/elseif block here, or probably just a switch/case block.
}
}

注意:不要重复这样的字段;如果您的父类有一个名为 species 的字段,请勿在子类中创建另一个也名为 species 的字段。你没有覆盖任何东西,你有两个完全不相关的字段,其中之一是“隐藏的”,并且很难访问。糟糕的计划。另外,在这里使其静态也很奇怪。也不要这样做。这意味着制造多个这样的产品将会失败。

关于java - 使用影响 super 构造函数的变量调用子类构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59797080/

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