繁体   English   中英

所有子类的主类实例

[英]Main class instance for all subclasses

我上了三课: BankaccountCoin 我希望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()时,该给定对象中没有设置硬币,让我们逐步检查它:

  • 有银行班
  • 帐户类扩展银行(但不要设置硬币属性/变量,因为您既没有使用setCoint()方法在构造函数中也没有设置硬币属性/变量)
  • 您使用getMainCoin()->从未设置币值->错误:“ com.company.Coin找到”。

因此,您可以采用以下方法:

  1. 如果要将默认硬币设置为“所有银行”对象,则可以执行类变量(也称为静态变量)更改“ private Coin maincoin;”。 以“私有静态代币maincoin”。 如果采用这种方法,则应创建一个静态方法“ setCoin()”或将构造函数设为静态。

    这样,如果您扩展该类,并且一旦将Coin对象设置为Bank类,则该类的每个对象(或对其进行扩展的对象)将具有相同的Coin对象。

  2. 但是,如果您希望每个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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM