[英]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.