-1

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

    //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 是 Champions 组的成员,每个人都有自己独特的健康价值。我希望能够将它们全部组合到一个数组中以便于获取值,因为我知道 ChoGath(例如)在数组中的位置。

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

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

4

3 回答 3

3

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

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

于 2013-02-04T08:51:54.690 回答
1

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

interface Champion
{
    public int getHealth();
    public void setHealth(int health);
}
于 2013-02-04T08:51:48.143 回答
1

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

接口冠军 { public int getHealth(); }

现在在 ChoGath 和 Ahri 类中实现这个方法

于 2013-02-04T08:59:31.003 回答