对象数组中无法访问公共方法

时间:2011-05-16 04:44:34

标签: java arrays arraylist public-method

我遇到的问题是无法在数组的对象元素中调用自己的方法

以下是带有数组的代码部分的代码:

public class CardRules {
    private Object cardArray[];

public CardRules(Object cardArrayCopy[]){

    cardArray = cardArrayCopy;
    multiples();
}
public void multiples(){
for(Object ArrayElement: cardArray){
    System.out.println(ArrayElement);
}
}
}

对于卡片对象:

public class Card {
    private int rank;
    private int suit;
    private String Stringrank[] = {"Ace", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine", "Ten", "Jack", "Queen", "King"};
    private String Stringsuit[] = {"Spades", "Hearts", "Diamonds", "Clubs"};
    public static int CardNo = 0;

public Card(int cardDetails[]){
    rank = cardDetails[1];
    suit = cardDetails[0];
    CardNo++;
}
public String getCard(){
    return ("Card: " + Stringrank[rank] + " Of " + Stringsuit[suit]);

}
   public int getRank(){
       return rank;
   }
   public int getSuit(){
       return suit;
   }

}

这部分程序的输出是哈希码, 卡@ 9304b1 卡@ 190d11 卡@ a90653 卡@ de6ced 卡@ c17164

我想提出类似或类似的东西

System.out.println(ArrayElement.getRank());

有没有人对为什么会这样做有任何想法?

btw使用premade .toArray()方法从另一个类的ArrayList复制数组

2 个答案:

答案 0 :(得分:3)

编译器无法知道这些对象是卡,因为您在数组中将它们声明为Object。如果您确定它们是卡片,请将数组声明为Cardprivate Card cardArray[];)或投射它们((Card)ArrayElement).getRank()

如果您想再次查看,请在投射前使用ArrayElement instanceof Card验证这是真实的Card实例。

答案 1 :(得分:0)

System.out.println()调用Object.toString(),因此会覆盖类卡的toString()方法。 (顺便说一下:最好让StringrankStringsuit都是静态的):

@Override
public String toString() {
    return String.format("Card [rank= %s, suit= %s]", 
           Stringrank[rank], Stringsuit[suit]);
}