我有三个课程:Bank
,account
和Coin
。我希望类Bank
有一个默认的硬币变量,我将其传递给它的构造函数。所以我将帐户扩展到Bank,
这意味着我可以通过方法getmainCoin()
通过account
类访问默认的硬币变量。出于某种原因,我在尝试时遇到了这个错误:
错误:(12,32)java:com.company.bank类中的构造函数bank不能应用于给定的类型; 必需:com.company.Coin 发现:没有争论 原因:实际和正式的参数列表长度不同
// Instantiations
Coin dollars = new Coin("Dollar", "$");;
bank SomeBank = new bank(dollars);
Person john = new Person("John Doe", 20, dollars, new account(9058));
System.out.println(john.checkbalance());
public class bank {
public String name;
private int coinsheld;
private Coin maincoin;
public bank(Coin maincoin){
this.maincoin = maincoin;
}
public Coin getmainCoin(){
return this.maincoin;
}
}
public class account extends bank {
private int balance;
private static int accounts;
private int accnumber;
private Coin coin;
public account(int balance){
this.balance = balance;
this.accounts += 1;
this.accnumber = accounts;
this.coin = getmainCoin();
}
}
public class Coin {
public static int total;
private String name;
private String sign;
private int id;
public Coin(String name, String sign){
this.name = name;
this.sign = sign;
this.id = total + 1;
}
public int getID(){
return this.id;
}
}
答案 0 :(得分:1)
问题是当你在“帐户”对象中使用getCoin()时,该给定对象中没有硬币集,让我们一步一步地查看它:
所以你可以采取这种方法:
如果要将默认硬币设置为所有Bank对象,可以执行一个类变量(也称为静态变量),更改“private Coin maincoin;”到“私人静态硬币maincoin”。如果你采用这种方法,你应该创建一个静态方法“setCoin()”或使你的构造函数静态。
这样,如果扩展该类,并且一旦将Coin对象设置为Bank类,该类的每个对象(或者例如扩展它的对象)将具有相同的Coin对象。
< / LI>但是如果你想让每个Bank对象拥有不同的默认Coin(甚至是你创建的新Account对象),那么你应该在你的Account构造函数中添加一个参数来设置硬币或setCoint()方法而不是在你甚至设置if之前调用getCoin()。
编辑:因为错别字和视觉吸引力。
答案 1 :(得分:0)
在您的帐户类中,您必须调用bank构造函数,因为account扩展了bank并且没有默认(无参数)构造函数。 做这样的事情:
super(coin)
答案 2 :(得分:0)
你的account
类构造函数public account(int balance)
隐式调用父类默认构造函数即super();
,但是你没有提供任何默认构造函数bank
上课。
因此,您可以通过在bank
类中创建默认构造函数来解决此问题,如下所示:
public class bank {
public bank() {
}
//your code here
}
然而,您的班级关系不正确,即,当您在java中说Account extends Bank
时,这意味着Account
IS-A Bank
,它不会似乎是对的。
此外,您不遵循类,方法,变量名称的Java命名约定,即类/接口名称以大写字母开头,其中方法/变量名称应为小写。
答案 3 :(得分:0)
每当扩展一个类时,子类会在其构造函数中自动调用super()
。 super()
基本上称为超级&#39;构造函数。现在,您的超类 bank
没有无参数构造函数,因为您覆盖了默认 。要修复,请添加如下构造函数: -
public bank() {
}
或者您可以使用super
对象明确调用Coin
。
public account(int balance){
super(someCoinReference);
..//rest of code
}
然而,这可能不是你想要的。