所有子classes的主要class实例

Main class instance for all subclasses

我得到了三个 classes:BankaccountCoin。我希望 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"。

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

  1. 如果您想将默认硬币设置为所有银行对象,您可以执行一个 class 变量(也称为静态变量)将 "private Coin maincoin;" 更改为 "private static Coin maincoin".如果你采用这种方法,你应该创建一个静态方法 "setCoin()" 或使你的构造函数静态。

    那样的话,如果你扩展 class,并且一旦 Coin 对象被设置为银行 class,那个 class 的每个对象(或者扩展它的对象,对于实例)将具有相同的硬币对象。

  2. 但是如果你希望每个 Bank 对象有一个不同的默认 Coin(甚至是你创建的新 Account 对象)那么你应该向你的 Account 构造函数添加一个参数来设置硬币或一个 setCoint( ) 方法,而不是在设置 if 之前调用 getCoin(),当然。

已编辑:由于拼写错误和视觉吸引力。