我正在搞乱继承,并对如何做一些不同的事情感到困惑。这就是我所拥有的:
查看Account类并在另一个类Bank中编写main方法,以简要介绍Account类的一些实例。
使用Account类作为基类,编写两个名为SavingsAccount和CheckingAccount的派生类。除Account对象的属性外,SavingsAccount对象还应具有兴趣变量和增加帐户兴趣的方法。除Account对象的实例变量外,CheckingAccount对象应具有透支限制变量。确保在两个派生类中都根据需要重写了Account类的方法。
现在创建一个Bank类,其对象包含一个Account对象数组。数组中的帐户可以是Account类,SavingsAccount类或CheckingAccount类的实例。创建一些测试帐户(每种类型的一些)。
在银行类中编写更新方法。它遍历每个帐户,并通过以下方式更新它:储蓄帐户获得兴趣(通过您已经写过的方法);支票账户如果透支则会收到一封信。
public class Account {
private double balance;
private int acctNum;
public Account (int num)
{
balance = 0.0;
acctNum = num;
}
public void deposit (double amt)
{
if (amt >0)
balance +=amt;
else
System.out.println("Account.deposit(...): "
+"cannot deposit negative amount.");
}
public void withdraw (double amt)
{
if (amt>0)
balance -=amt;
else
System.err.println("Account.withdraw(...): "
+"cannot withdraw negative amount.");
}
public double getBalance()
{
return balance;
}
public double getAccountNumber()
{
return acctNum;
}
public String toString()
{
return "Acc " + acctNum + ": " + "balance = "+ balance;
}
public final void print()
{
System.out.println( toString());
}
}
现在是SavingsAccount
public class SavingsAccount extends Account {
private double interest;
public SavingsAccount(int acctNum, double interest) {
super(acctNum);
this.interest=interest;
}
public double getInterest() {
double x= getBalance() + getBalance()*interest;
return x;
// public void setInterest((interest))
// this.interest=interest;
}
public void AddInterest (double interest) {
double x = super.getBalance() * interest;
super.deposit(x);
}
public String toString() {
return super.toString()+" Interest : " + interest;
}
}
的CheckingAccount
public class CheckingAccount extends Account {
private double limit;
public CheckingAccount(int acctNum, double limit) {
super(acctNum);
this.limit=limit;
}
public double getLimit() {
return this.limit;
}
public void setLimit(double limit) {
this.limit=limit;
}
public void withdraw (double limit) {
if (limit <= this.limit)
super.withdraw(limit);
else {
System.out.println(" Sorry, Limit Exceeded" );
}
}
public String toString() {
return super.toString() +"Limit : "+limit;
}
}
银行班
public class Bank {
public static void main(String[] args) {
Account[] accounts = new Account[2];
accounts[0] = new SavingsAccount(2, 0.25);
accounts[1] = new CheckingAccount(23, 50);
for(int i=0; i<accounts.length;i++) {
if (accounts[0].equals(SavingsAccount)
System.out.println(accounts[0].getInterest());
}
}
所以这是我注意到的问题。
在SavingsAccount中,我不知道如何让setInterest()工作。我已经尝试将其更改为int,但随后更改了Account类。如何让它正常工作?
在银行班 - 我写的for循环。它没有用,我试过if(accounts [i] .equals如此,但似乎没有正常运作。正确的方法是什么?
同样,我假设一切都来自我的SavingsAccount类。
答案 0 :(得分:0)
如果我了解您在for循环中尝试执行的操作,则需要使用instanceof
来检查课程,而不是equals()
。
所以,例如
Account[] accounts = new Account[2];
accounts[0] = new SavingsAccount(2, 0.25);
accounts[1] = new CheckingAccount(23, 50);
for(int i=0; i<accounts.length;i++) {
if (accounts[i] instanceof SavingsAccount) {
// You must cast an Account to use any of the descendant's methods
SavingsAccount account = (SavingsAccount) accounts[i];
System.out.println(account.getInterest());
} else { // it's a CheckingAccount
}
}
除此之外,StackOverflow不是您转发作业要求的地方,所以您的问题在完成时回答过于宽泛。