![](/img/trans.png)
[英]How can a class access its super class variables even there are not protected?
[英]Way to access variables of class from collection of its super?
假设我有:
class Card{ }
class CardUnit extends Card {
int attack = 4;
}
ArrayList<Card> listCards;
有什么方法可以将Cards和CardUnits都放入我的listCards数组中,并且仍然能够访问列表中CardUnits的攻击变量? 还是也必须将变量放入Card类中?
如果在Card类中添加方法getAttack()(具有默认值)并在CardUnit中覆盖它,则可以访问它。
也许您想将Card类抽象化(您不能创建对象); 您可以使getAttack()方法抽象并强制子类实现它。
您可以使用instanceof
测试CardUnit
,然后执行true。
for (Card i : list) {
if (i instanceof CardUnit){
actOnAttackValue( (CardUnit) i );
}
}
我不喜欢向Card添加抽象方法,因为
Human
类中添加了gaveBirth()
方法一样 如果所有卡都受到攻击,则可以将抽象的getAttack()添加到超类。
class Card {
public abstract int getAttack();
}
否则,您可能具有一个由CardUnit实现的接口IAttackCard和方法getAttack()。 然后,从列表中访问卡时,可以检查它们是否是IAttackCard的实例。
interface ICardAttack {
public int getAttack();
}
class CardUnit extends Card implements ICardAttack {
private int attack;
@Override
public int getAttack() { return attack; }
}
使用instanceof直接测试CardUnit会干扰开闭原理-添加Card的新子类可能需要修改与Card一起使用的现有代码。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.