如何访问存储在Java中类似对象数组中的对象的各个值

时间:2013-02-04 08:47:05

标签: java arrays object

我在尝试保持编码的有序性和尽可能简单方面遇到了问题。我基本上有一组包含多个值的类似对象。我想要访问这些单独的值,并能够随意修改它们,但似乎无法访问它们。这就是代码基本上看起来的样子......

    //In file Champion.java
    package Champions;
    public interface Champion{}

    //In another file ChoGath.java
    package Champions;
    public class ChoGath implements Champion{
    public static double health = 440.0;
    }

    //Yet another file Ahri.java
    package Champions;
    public class Ahri implements Champion{
    public static double health = 380.0;
    }

    //In the main build file LOLChampBuilder.java
    package LOLChampBuilder;
    import Champions.*;
    public class LOLChampBuilder{
        public static Champion[] listOfChampions = {new ChoGath(), new Ahri()};
        public static void main(String args[]){
            //This next line works
            System.out.println(new ChoGath().health);
            //This next line does not work
            System.out.println(listOfChampions[0].health);
        }
    }

还有更多变量和诸如此类的东西,但这是基本问题。

ChoGath和Ahri是冠军团体的一员,每个人都有自己独特的健康价值。我希望能够将它全部组合到一个数组中以便于获取值,因为我知道ChoGath(作为示例)在数组中的位置。

我收到错误Cannot find symbol 'health' in Champions.Champion。我已经去了并且在Champion中创建了它并修复了它(并且还将它更改为类然后扩展而不是实现)但是当我去打印时,值总是为380.0,因为它是对值健康的最新编辑在冠军。

我想要它以便我可以将所有“冠军”组合在一个阵列下(因此它们需要是相同的对象类型,即:冠军,如果我错了就纠正我)并访问他们的个人价值观。我似乎无法做到这一点所以我不知道我是否需要使用ArrayList(我从未使用过)或完全不同的东西。现在我知道我可以解决这个问题并将其全部放入一个大文件中,但我试图将多个文件用于组织目的以及清洁度。关于该怎么做的想法?

3 个答案:

答案 0 :(得分:3)

您需要在界面中添加getHealth()。这就是吸气剂的用途。

还要避免使用static个变量。它们往往会产生编程错误。

答案 1 :(得分:1)

您必须在界面中使用getter和setter才能获得此功能,或者使用基类而不是Champion的接口,例如:

interface Champion
{
    public int getHealth();
    public void setHealth(int health);
}

答案 2 :(得分:1)

您的界面中需要health变量。这类似于Subclass和Superclass的概念。您不能使用超类类型访问子类的变量,因为所有超类都不是子类(反之亦然)。您只能在超类中定义它们时才能访问它们。如果在界面中使用健康变量,则必须是最终静态变量。因此,最好在界面中使用setter和getter方法来获取值。

  

interface Champion {public int getHealth(); }

现在在ChoGath和Ahri类中实现此方法