[英]get same 12 variables from 8 classes in different packages java
我想知道是否有辦法從不同包中的8個不同類中獲取多個變量(其中12個):
(人類老(3之8),人類成人(2之8)和人類兒童(8之3))。
這是其中一個類的示例:
package Humans.Adult;
import Humans.BaseHuman;
import java.util.ArrayList;
import java.util.List;
public class Brother extends BaseHuman {
public void init() {
List<Integer> startingItemCodes = new ArrayList<Integer>();
startingItemCodes.add(0);
setMAX_SANE(110); // Part of getters and setters in BaseHuman.java
setMAX_WATER(110); // This also
setMAX_HUNGER(110); // This also
setHEALTH(100); // This also
setHUNGER_DEC(10); // This also
setSANE_DEC(10); // This also
setWATER_DEC(10); // This also
setHEALTH_DEC_HUNGER(10); // This also
setHEALTH_DEC_THIRST(10); // This also
setSICK_CHANCE(0.05f); // This also
setNAME("Brother"); // This also
setSTARTING_ITEMS(startingItemCodes); // This also
}
}
因此,對於最上面的8個類中的每一個,我都可以調用BaseHuman擴展的所有12個getter方法,因此最終將調用96個getter方法。 抱歉,我剛接觸Java。
我該怎么做?
- 謝謝!
繼承的優點之一是,您可以在從其繼承的每個類(例如Brother)上調用BaseHuman的方法。 因此,您可以像這樣列出BaseHuman:
ArrayList<BaseHuman> bhList = new ArrayList<BaseHuman>();
然后將Brothers和其他所有內容添加到列表中。
Brother broA = new Brother();
Sister sisA = new Sister();
bhList.add(broA);
bhList.add(sisA);
那么您可以像這樣在列表中存儲的每個對象中調用getter:
for(BaseHuman bh : bhList){
System.out.println(bh.get());
}
要求是您覆蓋超類BaseHuman的getter方法。
如果您想了解更多,可以查看“多態性”。
我不確定自己是否理解問題的目的,因此,如果我誤解了,請告訴我。
如果您真的只想調用每個類中的所有getter,則可以使用@ M.Dan提供的解決方案。 但是,對我來說,這聽起來像是您正在嘗試創建一個繼承自BaseHuman
的類的實例,以便可以更改其屬性。 例如, OldHuman
的HEALTH
值可能較低,但其他方面相同。
您不必通過再次調用所有getter來設置字段,而只需通過調用super()
即可使用BaseHuman
類構造函數:
class OldHuman extends BaseHuman {
public OldHuman() {
super(); //invokes parent constructor which you supplied default values
this.HEALTH = 75; //change HEALTH to desired amount instead
}
}
這樣,您就可以節省自己重寫96次所有字段的時間,並且僅更改所需的內容。 並且,您的OldHuman
行為將完全相同(getter,setter等)。
如果您仍然真的需要調用所有getter,則至少可以在BaseHuman
中編寫一個方法,該方法返回某種Collection中的所有字段,然后讓您的類繼承該方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.