Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/367.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用影响超级构造函数的变量调用子类构造函数_Java_Inheritance_Subclass - Fatal编程技术网

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

Java 使用影响超级构造函数的变量调用子类构造函数,java,inheritance,subclass,Java,Inheritance,Subclass,我试图创建一个类来扩展抽象类Animals,它可以从main方法调用,int决定字符串species包含什么。但是,在我下面的代码中,整数不会以任何方式影响字符串,因为对超级构造函数的调用必须是子类构造函数中的第一条语句。如何使用“实现”字符串再次调用超级构造函数?我已经尝试在子类中创建一个重载构造函数并首先调用它,但这似乎不起作用 public abstract class Animals { protected String species; public Animals(Strin

我试图创建一个类来扩展抽象类Animals,它可以从main方法调用,int决定字符串species包含什么。但是,在我下面的代码中,整数不会以任何方式影响字符串,因为对超级构造函数的调用必须是子类构造函数中的第一条语句。如何使用“实现”字符串再次调用超级构造函数?我已经尝试在子类中创建一个重载构造函数并首先调用它,但这似乎不起作用

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
的字段。您没有覆盖任何内容,您有两个完全不相关的字段,其中一个是“阴影”,很难访问。糟糕的计划。而且,在这里使它静止是很奇怪的。也不要那样做。这将意味着制造多个这样的产品将失败