Java 使用影响超级构造函数的变量调用子类构造函数
我试图创建一个类来扩展抽象类Animals,它可以从main方法调用,int决定字符串species包含什么。但是,在我下面的代码中,整数不会以任何方式影响字符串,因为对超级构造函数的调用必须是子类构造函数中的第一条语句。如何使用“实现”字符串再次调用超级构造函数?我已经尝试在子类中创建一个重载构造函数并首先调用它,但这似乎不起作用Java 使用影响超级构造函数的变量调用子类构造函数,java,inheritance,subclass,Java,Inheritance,Subclass,我试图创建一个类来扩展抽象类Animals,它可以从main方法调用,int决定字符串species包含什么。但是,在我下面的代码中,整数不会以任何方式影响字符串,因为对超级构造函数的调用必须是子类构造函数中的第一条语句。如何使用“实现”字符串再次调用超级构造函数?我已经尝试在子类中创建一个重载构造函数并首先调用它,但这似乎不起作用 public abstract class Animals { protected String species; public Animals(Strin
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
的字段。您没有覆盖任何内容,您有两个完全不相关的字段,其中一个是“阴影”,很难访问。糟糕的计划。而且,在这里使它静止是很奇怪的。也不要那样做。这意味着不止一个操作会失败。一旦你传递了一个值,你就传递了它。以后更新该值不会影响您以前将其提供给的内容。不过,很容易解决:
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
的字段。您没有覆盖任何内容,您有两个完全不相关的字段,其中一个是“阴影”,很难访问。糟糕的计划。而且,在这里使它静止是很奇怪的。也不要那样做。这将意味着制造多个这样的产品将失败