我在尝试保持编码的有序性和尽可能简单方面遇到了问题。我基本上有一组包含多个值的类似对象。我想要访问这些单独的值,并能够随意修改它们,但似乎无法访问它们。这就是代码基本上看起来的样子......
//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(我从未使用过)或完全不同的东西。现在我知道我可以解决这个问题并将其全部放入一个大文件中,但我试图将多个文件用于组织目的以及清洁度。关于该怎么做的想法?
答案 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类中实现此方法