繁体   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