[英]Main class instance for all subclasses
我上了三课: Bank
, account
和Coin
。 我希望Bank
类具有默认的coin变量,然后将其传递给其构造函数。 因此,我将账户扩展到Bank,
这意味着我可以通过account
类的getmainCoin()
方法访问默认的硬币变量。 由于某些原因,尝试时出现此错误:
错误:(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;
}
}
问题是,当您在“ Account”对象中获取getCoin()时,该给定对象中没有设置硬币,让我们逐步检查它:
因此,您可以采用以下方法:
如果要将默认硬币设置为“所有银行”对象,则可以执行类变量(也称为静态变量)更改“ private Coin maincoin;”。 以“私有静态代币maincoin”。 如果采用这种方法,则应创建一个静态方法“ setCoin()”或将构造函数设为静态。
这样,如果您扩展该类,并且一旦将Coin对象设置为Bank类,则该类的每个对象(或对其进行扩展的对象)将具有相同的Coin对象。
但是,如果您希望每个Bank对象具有不同的默认Coin(甚至是您创建的新Account对象),则可以在Account构造函数中添加一个参数来设置硬币或setCoint()方法,而不在调用前调用getCoin()当然,即使设置。
编辑:因为错别字和视觉吸引力。
在您的帐户类中,您必须调用bank构造函数,因为account扩展bank且没有默认(无参数)构造函数。 做这样的事情:
super(coin)
您的account
类构造函数是public account(int balance)
隐式调用父类的默认构造函数,即super();
,但您在bank
类中未提供任何默认构造函数。
因此,您可以通过在bank
类中创建默认构造函数来解决此问题,如下所示:
public class bank {
public bank() {
}
//your code here
}
但是, 您的类关系不正确,即,当您说Account extends Bank
用Java Account extends Bank
时,这意味着Account
IS-A Bank
似乎不正确。
另外,您也不遵循类,方法,变量名称的Java命名约定,即类/接口名称以大写字母开头,而方法/变量名称应为小写字母。
每当扩展类时 , 子类都会在其构造函数中自动调用super()
。 super()
基本上调用了超类的构造函数。 现在,您的超大型 bank
没有无参数的构造函数 ,因为您覆盖了默认的 。 要解决此问题,请添加这样的构造函数:-
public bank() {
}
或者,您可以使用Coin
对象显式调用super
。
public account(int balance){
super(someCoinReference);
..//rest of code
}
但是,这可能不是您想要的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.