簡體   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