繁体   English   中英

如何在不转换多态性的情况下调用子 function Java

[英]How to call child function without casting Polymorphism Java

本质上,我希望能够在不施放的情况下返回所有具有生命值或价值的卡片的生命值。 我怎么能 go 关于这样做? Deck是一张卡片列表,卡片可以有许多不同的子类型。 在这个例子中,我让它变得非常简单,但我的目标是能够将它扩展到许多不同类型的卡片,其中许多卡片没有生命值。

此处发布的类似问题: Calling a subclass method from superclass讨论使用 Casting 但例如,如果我有 1000 种不同的卡类型并且其中只有 20 种返回 hp,我不想为每个施法都编写if语句。 当然,这个问题还有另一种解决方案。

public class Deck {
    ArrayList<Card> deck = new ArrayList<>();

    Deck() {
        deck.add(new Item());
        deck.add(new Monster());
    }

    public ArrayList<Card> getDeck() {
        return deck;
    }
}

public class Card {
    Card() {
    }
}

public class Item extends Card{
    Item() {
        super();
    }

    public int getValue() {
        return 4;
    }
}

public class Monster extends Card{
    Monster () {
        super();
    }
    
    public int getHealth() {
        return 2;
    }
}

public static void main(String[] args) {
    Deck deck = new Deck();
    for (Card card : deck.getDeck()) {
        System.out.println(card.getHealth());
    }
}

所需的 output:

2

一种解决方案是在Card中定义getHealth()方法,该方法返回适当的默认值,例如null0

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM