我正在尝试创建一个扩展抽象类Animals的哺乳动物类,该类可以从main方法中调用,并通过int确定String种类所包含的内容。但是,整数在我的以下代码中不会以任何方式影响String,因为对超级构造函数的调用必须是子类的构造函数中的第一条语句。如何使用“ actualized”字符串再次调用超级构造函数?我已经尝试在子类中创建一个重载的构造函数并首先调用它,但这似乎不起作用。
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.
}
}
NB:请勿重复这样的字段;如果您的父类有一个名为species
的字段,请不要在子类中再创建一个也名为species
的字段。您没有覆盖任何内容,您有2个完全不相关的字段,其中一个是“阴影”字段,并且很难访问。不好的计划。同样,在这里将其设为静态也很奇怪。也不要那样做。这将意味着使其中一个以上失败。
超级关键字行中的错误,您能帮我解决这个问题吗?我是Java新手。
abstract class Animals {
protected String species;
public Animals(String species) {
this.species = species;
}
}
public class Mammals1 {
String species;
public Mammals1(int speciesNumber) {
super(tospeciesName(speciesNumber));
}
public String tospeciesName(int speciesNumber){
if(speciesNumber == 0){
species = "Dog";
}
else if(speciesNumber == 1){
species = "Cat";
}
else if(speciesNumber > 1){
species = "Horse";
}
return species;
}
public static void main(String args[]){
Mammals1 a=new Mammals1(1);
}
}