我正在编写一个程序,我想从另一个类访问一个方法。我知道你应该为你想要使用的方法创建一个新对象,但是每次我这样做时,都会说“构造函数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;
}
}
答案 0 :(得分:4)
你应该像这样实例化一个新对象:
Card card = new Card();
另一方面,如果您的设计中使用了类的方法而没有实例化该类的对象,那么您正在寻找static
关键字。 static 定义的方法和变量被定义为类的属性而不是对象的属性。因此,您可以在不初始化对象的情况下使用static
方法。
public Class A{
public static void methodName(){
//you can call that methods from anywhere using A.methodName();
}
}
答案 1 :(得分:2)
当您尝试设置类的实例时,会自动调用构造函数。
只要您不创建另一个构造函数,就会自动为您生成默认的no-args构造函数。完成后,需要自己指定 no-args构造函数,如下所示。
public Card(){}
答案 2 :(得分:1)
当用户定义参数化构造函数时,编译器不提供默认构造函数,因此如果用户希望通过不向构造函数提供参数来创建对象,则必须定义默认构造函数。
public Card()
{
//do something
}
看起来你有私有构造函数,将构造函数更改为以下
public Card(int r, Suit s)
{
this.suit = s;
this.rank = r;
}
注意:如果您想以下列方式创建Card对象:
Card card1;
card1 = new Card();
你可以定义public no argument constructor(即public Card(){})或者什么都不定义(如果没有:编译器不提供参数构造函数)
如果您想以这种方式创建Card对象:
Card card1, card2;
card1 = new Card();
card2 = new card(1,new Suit());
你必须包含我在上面显示的构造函数。
答案 3 :(得分:0)
当您使用参数编写构造函数时,JVM会隐藏默认构造函数(没有参数)。所以现在您需要定义一个没有参数的构造函数。所以现在需要定义一个构造函数
public Card(){
}
OR 使用参数化构造函数new Card(params)创建对象