package chess.model; public abstract class Piece { private final Color color; private int moved; public Piece(Color color) { this.color = color; this.moved = 0; } public void move() { this.moved++; } public Color getColor() { return color; } public boolean hasMoved() { return moved > 0; } public void unMove() { this.moved--; } public abstract T accept(PieceVisitor visitor); @Override public abstract boolean equals(Object other); }