从不同java包中的8个类中获取相同的12个变量

从不同java包中的8个类中获取相同的12个变量,java,Java,我想知道是否有办法从不同包中的8个不同类中获取多个变量12: 人类。8岁的3岁,人类。8岁的2岁,人类。8岁的3岁。 以下是其中一个类的示例: package Humans.Adult; import Humans.BaseHuman; import java.util.ArrayList; import java.util.List; public class Brother extends BaseHuman { public void init() { Lis

我想知道是否有办法从不同包中的8个不同类中获取多个变量12: 人类。8岁的3岁,人类。8岁的2岁,人类。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>();
for(BaseHuman bh : bhList){
    System.out.println(bh.get());
}
然后可以从列表中存储的每个对象调用getter,如下所示:

ArrayList<BaseHuman> bhList = new ArrayList<BaseHuman>();
for(BaseHuman bh : bhList){
    System.out.println(bh.get());
}
要求是覆盖超类BaseHuman中的getter方法


如果你想知道更多,你可以研究多态性。

我不能完全确定我理解问题背后的目的,因此如果我误解了,请告诉我

如果您真的只想调用每个类中的所有getter,那么可以使用@M.Dan提供的解决方案。但是,对我来说,这听起来像是您试图创建一个从BaseHuman继承的类的实例,以便您可以更改其属性。例如,老年人的健康价值可能较低,但在其他方面则相同

不需要再次调用所有getter来设置字段,只需通过调用super使用BaseHuman类构造函数即可:

这样,您就不用重写所有字段96次,只需更改您需要的内容。另外,你的老人会表现出完全相同的接受者、接受者等


如果您仍然需要调用所有的getter,那么您至少可以在BaseHuman中编写一个方法,返回某种类型集合中的所有字段,并让您的类继承这些字段。

这有意义吗?我试着尽我所能解释它…不,它没有意义。我认为你应该先开始,给你一些oop原理的知识。特别是在这个问题上,你需要很好地了解继承原则。还有什么是类,对象。因此,只需通过oop范式。如果你没有这方面的知识,那么用一个简单的答案给你一个答案是不可能的。无论如何,对我来说不是。我看不到getter方法,但我不明白为什么您会担心在该对象的类实际上拥有的对象上调用公共方法可能会有问题。为什么您需要getter?您正在尝试创建继承对象的实例吗?另外,请单独使用一致的Java命名约定。特别是,方法名称应该是大小写,首字母小写。示例:setMaxSane。这使得每个人都能更轻松地阅读你的代码,甚至是你。非常感谢!