所有子classes的主要class实例
Main class instance for all subclasses
我得到了三个 classes:Bank
、account
和 Coin
。我希望 class Bank
有一个默认的硬币变量,我将其传递给它的构造函数。所以我将帐户扩展到 Bank,
这意味着我可以通过方法 getmainCoin()
通过 account
class 访问默认硬币变量。出于某种原因,我在尝试时遇到了这个错误:
Error:(12, 32) java: constructor bank in class com.company.bank cannot be applied to given types;
required: com.company.Coin
found: no arguments
reason: actual and formal argument lists differ in length
// 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;
}
}
在您的帐户 class 中,您必须调用 bank 构造函数,因为 account 扩展了 bank 并且没有默认(无参数)构造函数。
做这样的事情:
super(coin)
你的 account
class 构造函数是 public account(int balance)
隐式 调用父 class 默认构造函数 即 super();
, 但你没有在 bank
class.
中提供任何默认构造函数
因此,您可以通过在 bank
class 中创建默认构造函数来解决问题,如下所示:
public class bank {
public bank() {
}
//your code here
}
然而,你的 class 关系不正确,即当你在 java 中说 Account extends Bank
时,这意味着 Account
IS-A Bank
,好像不太对。
此外,您没有遵循 java Class、方法、变量名称的命名约定,即 Class/Interface 名称以大写字母开头,而 method/variable 名称应该小写。
每当您 扩展 class 时,sub-class 会自动调用 super()
, 在它的构造函数中。 super()
基本上调用 super-class' 构造函数。现在,你的 super-class bank
没有 无参数构造函数 ,因为你 覆盖默认值。要修复,请添加这样的构造函数:-
public bank() {
}
或者您可以使用 Coin
对象显式调用 super
。
public account(int balance){
super(someCoinReference);
..//rest of code
}
然而,这可能不是你想要的。
问题是当您在 "Account" 对象中使用 getCoin() 时,在给定对象中没有设置硬币,让我们逐步回顾一下:
- 有一家银行class
- 帐户 class 扩展银行(但没有设置硬币 attribute/variable 因为你没有在构造函数中设置它,也没有使用 setCoint() 方法)
- 您使用 getMainCoin()->从未设置硬币值->错误:"com.company.Coin found"。
因此您可以采用以下方法:
如果您想将默认硬币设置为所有银行对象,您可以执行一个 class 变量(也称为静态变量)将 "private Coin maincoin;" 更改为 "private static Coin maincoin".如果你采用这种方法,你应该创建一个静态方法 "setCoin()" 或使你的构造函数静态。
那样的话,如果你扩展 class,并且一旦 Coin 对象被设置为银行 class,那个 class 的每个对象(或者扩展它的对象,对于实例)将具有相同的硬币对象。
但是如果你希望每个 Bank 对象有一个不同的默认 Coin(甚至是你创建的新 Account 对象)那么你应该向你的 Account 构造函数添加一个参数来设置硬币或一个 setCoint( ) 方法,而不是在设置 if 之前调用 getCoin(),当然。
已编辑:由于拼写错误和视觉吸引力。
我得到了三个 classes:Bank
、account
和 Coin
。我希望 class Bank
有一个默认的硬币变量,我将其传递给它的构造函数。所以我将帐户扩展到 Bank,
这意味着我可以通过方法 getmainCoin()
通过 account
class 访问默认硬币变量。出于某种原因,我在尝试时遇到了这个错误:
Error:(12, 32) java: constructor bank in class com.company.bank cannot be applied to given types; required: com.company.Coin found: no arguments reason: actual and formal argument lists differ in length
// 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;
}
}
在您的帐户 class 中,您必须调用 bank 构造函数,因为 account 扩展了 bank 并且没有默认(无参数)构造函数。 做这样的事情:
super(coin)
你的 account
class 构造函数是 public account(int balance)
隐式 调用父 class 默认构造函数 即 super();
, 但你没有在 bank
class.
因此,您可以通过在 bank
class 中创建默认构造函数来解决问题,如下所示:
public class bank {
public bank() {
}
//your code here
}
然而,你的 class 关系不正确,即当你在 java 中说 Account extends Bank
时,这意味着 Account
IS-A Bank
,好像不太对。
此外,您没有遵循 java Class、方法、变量名称的命名约定,即 Class/Interface 名称以大写字母开头,而 method/variable 名称应该小写。
每当您 扩展 class 时,sub-class 会自动调用 super()
, 在它的构造函数中。 super()
基本上调用 super-class' 构造函数。现在,你的 super-class bank
没有 无参数构造函数 ,因为你 覆盖默认值。要修复,请添加这样的构造函数:-
public bank() {
}
或者您可以使用 Coin
对象显式调用 super
。
public account(int balance){
super(someCoinReference);
..//rest of code
}
然而,这可能不是你想要的。
问题是当您在 "Account" 对象中使用 getCoin() 时,在给定对象中没有设置硬币,让我们逐步回顾一下:
- 有一家银行class
- 帐户 class 扩展银行(但没有设置硬币 attribute/variable 因为你没有在构造函数中设置它,也没有使用 setCoint() 方法)
- 您使用 getMainCoin()->从未设置硬币值->错误:"com.company.Coin found"。
因此您可以采用以下方法:
如果您想将默认硬币设置为所有银行对象,您可以执行一个 class 变量(也称为静态变量)将 "private Coin maincoin;" 更改为 "private static Coin maincoin".如果你采用这种方法,你应该创建一个静态方法 "setCoin()" 或使你的构造函数静态。
那样的话,如果你扩展 class,并且一旦 Coin 对象被设置为银行 class,那个 class 的每个对象(或者扩展它的对象,对于实例)将具有相同的硬币对象。
但是如果你希望每个 Bank 对象有一个不同的默认 Coin(甚至是你创建的新 Account 对象)那么你应该向你的 Account 构造函数添加一个参数来设置硬币或一个 setCoint( ) 方法,而不是在设置 if 之前调用 getCoin(),当然。
已编辑:由于拼写错误和视觉吸引力。