簡體   English   中英

使用影響超級構造函數的變量調用子類構造函數

[英]Calling a subclass constructor with a variable affecting the super constructor

我正在嘗試創建一個擴展抽象類 Animals 的類 Mammals,可以從 main 方法調用它,並使用一個 int 來確定 String 物種包含的內容。 但是,整數不會以任何方式影響我下面代碼中的字符串,因為對超級構造函數的調用必須是子類構造函數中的第一條語句。 如何使用“已實現”字符串再次調用超級構造函數? 我已經嘗試在子類中創建一個重載的構造函數並首先調用它,但這似乎不起作用。

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字段。 您沒有覆蓋任何內容,您有 2 個完全不相關的字段,其中一個是“隱藏”的,並且很難訪問。 糟糕的計划。 另外,在這里讓它保持靜態是很奇怪的。 也不要那樣做。 這將意味着制造不止一個這樣的產品會失敗。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM