簡體   English   中英

從不同的包java中的8個類中獲得相同的12個變量

[英]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的類的實例,以便可以更改其屬性。 例如, OldHumanHEALTH值可能較低,但其他方面相同。

您不必通過再次調用所有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.

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