ArrayList中子对象的属性和方法不可见

时间:2016-12-09 09:40:08

标签: java class inheritance

我这里有一个简单的例子,只是为了表明我遇到的问题: 我有类,财产“价格” 在这个卡类中,我有2个孩子,类和类,每个都有他们继承的价格和他们的赢得价值。 现在我制作一个ArrayList“hand”,其中我放了2张铜卡和1张银卡。直到这里好。使用语句System.out.println(hand.get(0));我得到“我是铜卡”,这是好的。使用System.out.println(hand.get(0).getClass());我得到“类铜”也没关系。但是,System.out.println(hand.get(0).getValue()); dos不起作用,来自Copper的getValue()方法不可访问,只有Card类的getPrice()方法。 我在这里看了类似的问题,但没有答案有效..谁能帮助我!非常感谢!
PS这里是代码

public class Card {

    int price;
    public Card(int price) {
        this.price = price;
    }
    public int getPrice() {
        return price;
    }
    public String toString() {
        return new String ("I am a card");
    }
}

public class Copper extends Card {

    int value;
    public Copper(int price, int value) {
        super(price);
        this.value = value;

    public int getValue() {
        return value;
    }
    public int getPrice() {
        return price;
    }
    public String toString() {
        return new String ("I am a Copper card");
    }
}

public class Silver extends Card{

    int value;
    public Silver(int price, int value) {
        super(price);
        this.value = value;
    }
    public int getValue() {
        return value;
    }
    public int getPrice() {
        return price;
    }
    public String toString() {
        return new String ("I am a Silver card");
    }
 }

 import java.util.ArrayList;
 public class Start {

    public static void main (String[] args)
    {
        Card Card1 = new Copper(0,1);
        Card Card2 = new Copper(0,1);
        Card Card3 = new Silver(3,2);
        ArrayList<Card> hand = new ArrayList<Card>();
        hand.add(Card1);
        hand.add(Card2);
        hand.add(Card3);
        System.out.println(hand.get(0));
        System.out.println(hand.get(0).getClass()); // --> OK
        System.out.println(hand.get(0).getPrice()); // --> OK
        System.out.println(hand.get(0).getValue()); // --> NOT OK                   
    }
}

1 个答案:

答案 0 :(得分:3)

System.out.println(hand.get(0).getValue()); // --> NOT OK 

因为您声明了列表:ArrayList<Card> hand,所以所有元素都是Card类型,但是您的getValue()类中没有Card方法。< / p>

你可以在你的超类(getValue())中创建Card,并让子类覆盖它,如果你的子类需要用这个方法做一些特殊的事情。