我这里有一个简单的例子,只是为了表明我遇到的问题:
我有卡类,财产“价格”
在这个卡类中,我有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
}
}
答案 0 :(得分:3)
System.out.println(hand.get(0).getValue()); // --> NOT OK
因为您声明了列表:ArrayList<Card> hand
,所以所有元素都是Card
类型,但是您的getValue()
类中没有Card
方法。< / p>
你可以在你的超类(getValue()
)中创建Card
,并让子类覆盖它,如果你的子类需要用这个方法做一些特殊的事情。