【问题标题】:Creating subclasses创建子类
【发布时间】:2014-02-26 19:54:22
【问题描述】:

我必须使用 Account 创建一个类,该类定义为模拟银行帐户。 (账户有属性帐号、余额、年利率、创建日期、存取款方式。)

如何为支票和储蓄账户创建两个子类?支票账户必须有透支限额,但储蓄不能超支。

任何帮助或建议都会很棒,谢谢(:

public class Accountdrv {
  public static void main (String[] args) {
    Account account = new Account(1122, 20000, 4.5);

    account.withdraw(2500);
    account.deposit(3000);
    System.out.println("Balance is " + account.getBalance());
    System.out.println("Monthly interest is " +
      account.getMonthlyInterest());
    System.out.println("This account was created at " +
      account.getDateCreated());
  }
}

class Account {
  private int id;
  private double balance;
  private double annualInterestRate;
  private java.util.Date dateCreated;

  public Account() {
    dateCreated = new java.util.Date();
  }

  public Account(int id, double balance, double annualInterestRate) {
    this.id = id;
    this.balance = balance;
    this.annualInterestRate = annualInterestRate;
    dateCreated = new java.util.Date();
  }

  public int getId() {
    return this.id;
  }

  public double getBalance() {
    return balance;
  }

  public double getAnnualInterestRate() {
    return annualInterestRate;
  }

  public void setId(int id) {
    this.id =id;
  }

  public void setBalance(double balance) {
    this.balance = balance;
  }

  public void setAnnualInterestRate(double annualInterestRate) {
    this.annualInterestRate = annualInterestRate;
  }

  public double getMonthlyInterest() {
    return balance * (annualInterestRate / 1200);
  }

  public java.util.Date getDateCreated() {
    return dateCreated;
  }

  public void withdraw(double amount) {
    balance -= amount;
  }

  public void deposit(double amount) {
    balance += amount;
  }
}

【问题讨论】:

  • 你可以在 Accountdrv 类中为个人操作创建方法

标签: java subclass


【解决方案1】:

考虑定义一个或多个接口。 例如:

public interface Account
{
    public double getAnnualInterestRate();
    public Date getDateCreated();
    public int getId();
    public double getMonthlyInterest();

    public void deposit(double amount);
    public void withdraw(double amount);
}

public interface CheckingAccount
extends Account
{
    public long getOverdraftLimit();
}

添加setter可能是合理的,但我更喜欢在实现类构造函数中设置vlues,或者将setter放在实现类中,而不是在接口中。 CheckingAccount 接口中的 setOverDraftLimit() 可能是一个合理的异常。

你犯了一些常见的金钱错误:

  • money 不是浮点值。它是一个定点值。 double 永远不适合金钱。请改用 long 并将其存储为一个单位的小数(例如 10000 = 1 美元)。
  • 了解如何执行利息计算。年利率绝不是 12 * 月利率。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-06-30
    • 2012-07-27
    • 2023-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-09
    相关资源
    最近更新 更多