繁体   English   中英

如何从 Java 中的子类访问私有数组?

[英]How do I access a private array from a subclass in Java?

我知道从子类中直接调用私有数组是不可能的,但我仍然需要以某种方式访问它,那么关于这个问题,go 的最佳方法是什么? 现在我有一个 class 用于我的主要方法、随机数组、播放器数组和第四个 class,我想用它来比较两个 arrays。

到目前为止,我已经尝试创建一个仅返回数组的 getter 方法,然后我会从比较 class 中调用该 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 ,让 arrays 对外部可见是不好的; 你无法控制它,你给它的任何人都可以改变它,例如getPlayerArray()[i] = 10; . 通常,使用列表( java.util.List )等代替 arrays。

  PlayerArray player = new PlayerArray(console);

在这里,您创建一个 PlayerArray 实例,它接收控制台并填充内部数组。

  testArray test = new testArray();
  test.printArray();

在这里,您创建一个新的 testArray 实例,其中尚未填充内部数组。

为了打印正确的值,您需要将 printArray() 方法复制到播放器 class 并在播放器实例上调用 printArray() 方法。

  player.printArray();

并从 Main 方法中删除 testArray() 实例。 它在这里毫无用处。

或者,您可以在 Player class 中添加一个构造函数,该构造函数接受一个控制台并通过 super(console) 将其传递给 Super;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM