java - 如何从 Java 中的子类访问私有数组?
问题描述
我知道不可能从子类中直接调用私有数组,但我仍然需要以某种方式访问它,那么最好的方法是什么?现在我有一个用于我的主要方法的类,随机数组,播放器数组和第四个类,我想用它来比较两个数组。
到目前为止,我已经尝试创建一个只返回数组的 getter 方法,然后我会从 compare 类中调用该 getter 方法。这失败了,所以我尝试制作一个基本的 for 循环将返回该数组中的每个值,但这也不起作用。所以我的问题是如何将私有数组的值放入子类中?
这是我的尝试之一,它只打印 0 0 0 0
public class test {
public static void main(String[] args) {
Scanner console = new Scanner(System.in);
PlayerArray player = new PlayerArray(console);
testArray test = new testArray();
test.printArray();
}
class PlayerArray extends RandomArray {
private int[] playerArray = new int[4];
public PlayerArray() {
}
public PlayerArray(Scanner console) {
System.out.println();
System.out.println("Enter 4 numbers you wish to guess: ");
for(int i=0; i<playerArray.length; i++) {
playerArray[i] = console.nextInt();
}
}
public int[] getPlayerArray() {
return playerArray;
}
}
class testArray extends PlayerArray {
public void testArray() {
}
public void printArray() {
System.out.println(getPlayerArray());
for (int i = 0; i < 4; i++) {
System.out.print(getPlayerArray()[i]);
}
}
}
解决方案
你在做。
但是,public void testArray()
什么都不做 - 你打算创建一个构造函数吗?那些没有返回类型,所以,只是public testArray
.
因为你没有写构造函数,java为你做了一个。它相当于:
public testArray() {
super();
}
例如,它调用了不做任何事情的 PlayerArray 构造函数,从而导致 playerArray 持有 4x a 0 值。如果您想要其他东西,那么该Scanner
参考不会凭空出现,因此:
public testArray(Scanner console) {
super(scanner);
}
调用“正确的人”。
注意:应该是TestArray
,并且使数组对外部可见是不好的,因为将它们公开;你无法控制它,你给它的任何人都可以改变它,例如getPlayerArray()[i] = 10;
. 通常,使用 Lists ( java.util.List
) 等代替数组。