使用影响超级构造函数的变量调用子类构造函数

问题描述 投票:0回答:1

我正在尝试创建一个扩展抽象类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";
    }
  }
}
java inheritance subclass
1个回答
2
投票

一旦传递值,就将其传递。以后更新值不会影响您之前提供的值。容易解决,但是:

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个完全不相关的字段,其中一个是“阴影”字段,并且很难访问。不好的计划。同样,在这里将其设为静态也很奇怪。也不要那样做。这将意味着使其中一个以上失败。


0
投票

超级关键字行中的错误,您能帮我解决这个问题吗?我是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);
    }
  }
© www.soinside.com 2019 - 2024. All rights reserved.