您好,感谢您抽出宝贵时间来查看我的问题。
我试图在对象数组中保存的对象上调用方法。
共有三类:纸牌,守卫和甲板。
Guard类扩展了Cards类。
该数组的类型为Cards,并在Deck类中实例化。
Cards类几乎是空的:
public class Cards {
}
存储在数组中的对象的类型为Guard。这是Guard类,它是状态和方法:
public class Guard extends Cards{
private int cardScore = 2;
private String cardName = "Guard";
private String cardAbility = "this is the guard's ability";
public void printGuardInfo()
{
System.out.println("This card score fo the guard is: "+cardScore);
System.out.println("The card name is: "+ cardName);
System.out.println("The card ability is" + cardAbility);
}
}
我正在Deck类中实例化数组。然后我用Guard类型的对象填充Card类型的数组。我相信这是多态的。
这行得通,我可以打印每个索引点上保存的参考变量。
public class Deck {
Cards[] deck = new Cards[16];
public Cards[] getDeck() {
return deck;
}
public void addGuards()
{
for(int i=0; i<5; i++)
{
deck[i] = new Guard();
deck[i].printGuardInfo();// Error: cannot resolve method printGuardInfo()
}
}
}
我的问题是我现在无法在deck [i]上调用printGuardInfo()方法。
我已经搜索和搜索了一段时间,但没有成功。我觉得我需要一个接口或某种抽象类。不幸的是,我在这些领域知识不足。
非常感谢您的任何帮助,谢谢。
最佳答案
我会宣传以下内容:
将Cards
设为interface
public interface Cards {
void print();
}
使
Guard
实现此接口,并在其中使用所需的信息覆盖print
方法。public class Guard implements Cards{
// ... Other methods and stuff
@Override
public void print() {
System.out.println("This card score fo the guard is: "+cardScore);
System.out.println("The card name is: "+ cardName);
System.out.println("The card ability is" + cardAbility);
}
// ... Other methods and stuff
}
现在在循环中,您只需要调用
deck[i].print();
现在要打印的内容将取决于必须打印的内容的实际实现,但是通常
Cards
类将知道它现在可以print
了。编辑:在@chrylis注释之后,您的类应称为
Card
而不是Cards
。原因在这里吗?这就像是针对单个Card
(此处为类)的简单计划,但并不表示多个Cards
(多个卡将是Card
的实例)。关于java - 如何在Java中存储在多态数组中的对象上调用方法?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40378915/