-2

我正在编写一个程序,我想从不同的类访问一个方法。我知道您应该为要使用的方法创建一个新对象,但每次我这样做时,它都会声明“构造函数 Card() 未定义”。我不想访问构造函数,我想访问该类中的不同方法。

这是我想将我的“其他”方法引入的方法的开始。我尝试创建一个新对象,但它在 * __ *之间的那部分给了我一个错误:

public void addCard(Card[][]card) {
    Card card1;
    card1 = *new Card();*

另一个方法被简单地调用getCard(int r, Suit s)(这是在不同的类中)。此类中还有一个构造函数方法,这就是错误似乎在谈论的内容..?

如果您能提供帮助,那就太好了,谢谢!

这是我的卡片类:

public class Card {
private static Card[][] card = new Card[4][13];
private int rank;
public enum Suit{hearts, diamonds, clubs, spades};
private Suit suit;

private Card(int r, Suit s){
    this.suit = s;
    this.rank = r;
}

public int getRank(){
    return rank;
}

public Suit getSuit(){
    return suit;
}

public static Card[][] getCard(int r, Suit s){
    if(card == null){
        return card;
    }
    else{
        card = new Card[4][13];
        return card;
    }
}
4

4 回答 4

4

您应该像这样实例化一个新对象:

Card card = new Card();

另一方面,如果您在设计中使用类的方法而不实例化该类的对象,那么您正在寻找static关键字。静态定义的方法和变量被定义为类的属性而不是对象。因此,您可以static在不初始化对象的情况下使用方法。

public Class A{
  public static void methodName(){
    //you can call that methods from anywhere using A.methodName();
  }
}
于 2013-03-06T04:25:24.737 回答
2

当您尝试设置类的实例时,会自动调用构造函数。

只要您不创建另一个构造函数,就会自动为您生成默认的无参数构造函数。完成后,您需要自己指定无参数构造函数,如下所示。

public Card(){}
于 2013-03-06T04:25:02.603 回答
1

当用户定义参数化构造函数时,编译器不提供默认构造函数,因此如果用户希望通过不向构造函数提供参数来创建对象,则必须定义默认构造函数。

public Card()
{
    //do something
}

看起来你有私有构造函数,将你的构造函数更改为以下

public Card(int r, Suit s)
{
    this.suit = s;
    this.rank = r;
}

注意:如果您想通过以下方式创建 Card 对象:

Card card1;
card1 = new Card();

您可以定义公共无参数构造函数(即 public Card(){})或什么都没有(如果什么都没有:编译器将提供无参数构造函数)

如果您想以这种方式创建 Card 对象:

Card card1, card2;
card1 = new Card();
card2 =  new card(1,new Suit());

你必须包括我上面显示的两个构造函数。

于 2013-03-06T04:24:44.650 回答
0

当您编写带参数的构造函数时,JVM会隐藏默认构造函数(没有参数)。所以现在您需要定义一个不带参数的构造函数。所以现在您需要定义一个构造函数

public Card(){
}

使用参数化构造函数 new Card(params) 创建对象

于 2013-03-06T04:27:01.977 回答