Если у всех карт есть атака, вы можете добавить абстрактный метод getAttack () в суперкласс.
class Card {
public abstract int getAttack();
}
В противном случае вы могли бы иметь интерфейс IAttackCard с методом getAttack (), который реализует CardUnit. Затем при доступе к карточкам из списка вы можете проверить, являются ли они экземплярами IAttackCard.
interface ICardAttack {
public int getAttack();
}
class CardUnit extends Card implements ICardAttack {
private int attack;
@Override
public int getAttack() { return attack; }
}
Тестирование непосредственно для CardUnit с instanceof будет противоречить принципу открытого-закрытого - добавление нового подкласса Card может потребовать модификации существующего кода, который работает с картами.