java - 从放置在 ArrayList 问题中的同一父类继承的对象
问题描述
有代码:
public class Piece {
boolean isWhite;
public Piece(boolean isWhite) {
this.isWhite = isWhite;
}
}
public class Bishop extends Piece {
public Bishop(boolean isWhite) {
super(isWhite);
}
}
因此,如果我创建 2 个匿名实例Bishop
并为它们设置isWhite
不同的值,它们就会拥有它。
System.out.println(new Bishop(true).isWhite); // prints true
System.out.println(new Bishop(false).isWhite); // prints false
但是当我将它们放入 ArrayList 时,其中的每个实例都将具有isWhite
第一个匿名类,如果它只调用一次的话。IE
List<Piece> pieces = new ArrayList<Piece>();
pieces.add(new Bishop(true));
pieces.add(new Bishop(false));
for (Piece p : pieces) {
System.out.println(p.isWhite); // prints true for both, as first was set
}
如果我也创建引用,就会发生这种情况,即
Bishop b1 = new Bishop(true);
Bishop b2 = new Bishop(false);
pieces.add(b1);
pieces.add(b2);
for (Piece p : pieces) {
System.out.println(p.isWhite) // prints true for the both
}
所以我不知道为什么会发生这种情况=(
解决方案
好的,看了你的src,你这里有错误。你在白色的部分上循环两次
public void paintPieces(Graphics g) {
for (Piece piece : whitePieces) {
g.drawImage(whitePiecesImages.get(piece.getType()), getXCoord(piece.getX()), getYCoord(piece.getY()), null);
System.out.println(piece.isWhite());
}
for (Piece piece : whitePieces) {
g.drawImage(blackPiecesImages.get(piece.getType()), getXCoord(piece.getX()), getYCoord(piece.getY()), null);
System.out.println(piece.isWhite());
}
}
所以是的,isWhite()
对于 System.out 中的黑色部分,所有这些都会告诉你真实的情况。
最后一个循环应该是:
for (Piece piece : blackPieces)
所以你的 JVM 可以一直喝,没问题
推荐阅读
- r - 空间距离,如何用R计算空间距离
- mysql - 如何在 Node.js 中共享所有 mysql 行?(车把)
- r - 如何在 Shiny 应用程序中动态调整 iframe 高度
- testing - 在 TDD 中,当要测试的函数未定义时,如何先编写测试?
- vue.js - Amcharts 自定义工具提示延迟渲染
- php - 尝试在 Google Cloud Console 上设置错误报告后,VM 实例上出现 HTTP 500 错误
- node.js - Mongoose .populate() 无法正常工作
- python - os.path.exists 返回 False,但 os.path.abspath 返回路径
- python - Django 3.1 - 在进行或应用迁移之前使用 ORM 类模型时出现“OperationalError:没有这样的表”
- docker - Docker托管多个具有不同IP地址但在同一端口上的容器