您好,感谢您抽出宝贵时间来查看我的问题。

我试图在对象数组中保存的对象上调用方法。

共有三类:纸牌,守卫和甲板。

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/

10-12 18:46