我在学习Java的同时写了一个简单的棋盘,并提出了以下问题:
我有抽象类ChessPiece
和类,如King
,等Queen
,Rook
它们都扩展了ChessPiece
。
我有一个用于棋盘的 ChessPiece 的 2D 数组。
public ChessPiece myChessBoard[][] = new ChessPiece[8][8];
然后我像这样制作我的棋子:
ChessPiece aPiece = new Rook();
并将其放在 myChessBoard 上,以便我可以找到它:
myChessBoard[0][0] = aPiece;
其他部分也一样...
我的问题是,当我public ChessPiece myChessBoard[][] = new ChessPiece[8][8];
在第一步中执行此操作时,我使用了 new 关键字并分配了 8*8 = 64 个 ChessPiece 对象,对吗?但是我在写ChessPiece aPiece = new Rook();
东西的时候又做了一次,我觉得 myChessBoard[0][0] 之类的东西不需要分配,因为它只是一个参考,不需要像new Rook()
.
简而言之,我觉得我只需要使用新关键字分配 32 个棋子(棋盘上的 32 个棋子)而不是 32 + 64 = 96 个棋子。
我可能混淆了Java中的一些基本概念,请帮忙。
编辑:
myChessBoard[][] = new ChessPiece[8][8]
在这里,我使用 new 关键字创建了 64 个没有真实对象的引用。所以 new 关键字不一定会创建新对象,它也可以创建引用 null 的新引用,对吧?
那是错的。“在这种情况下,新的关键字是创建一个新的二维数组对象”,这要归功于接受的答案。