[英]Passing Variables to Extended Class and Calling Methods
我現在完全不知所措。 我正在嘗試開發一個程序,該程序將顯示兩個儲蓄帳戶的Months
, Account #
和Balance
,並在應計利息時更新Balance
:
為此,我必須設計四個單獨的類。 SavingsAccount
, SavingsAccountDriver
, FlexibleSavingsAccount
和CDSavingsAccount
。 SavingsAccount
是FlexibleSavingsAccount
和CDSavingsAccount
的父類。 SavingsAccountDriver
是Main類。
在SavingsAccount
我有一個方法setAnnualInterestRate()
在SavingsAccountDriver
調用。 此方法設置每個帳戶的利率。 我遇到的問題是將此值傳遞給擴展類FlexibleSavingsAccount
和CDSavingsAccount
以便我可以通過添加每個帳戶的利率來更新余額。 如果有人可以幫助我完成這項工作,我將不勝感激。
SavingsAccountDriver :
public class SavingsAccountDriver {
public static void main (String[] args) {
SavingsAccount saver1 = new SavingsAccount(10002, 2000); //create new SavingsAccount object
SavingsAccount saver2 = new SavingsAccount(10003, 3000); //create new SavingsAccount object
saver1.setAnnualInterestRate(.012); //sets AnnualInterestRate for 'saver1' object
saver2.setAnnualInterestRate(.04); //sets AnnualInterestRate for 'saver2' object
System.out.println("\nMonthly balances:\n");
System.out.println("Month " + " Account# " + " Balance " + " " + " Month " + " Account# " + " Balance ");
System.out.println("----- " + " -------- " + " ------- " + " " + " ----- " + " -------- " + " ------- ");
System.out.println(saver1.getAccountNumber() + " / " + saver1.getBalance() + " / " + saver1.getInterest());
System.out.println(saver2.getAccountNumber() + " / " + saver2.getBalance() + " / " + saver2.getInterest());
/*for(int month = 0; month <= 12; month++) {
switch(month) { // switch that outputs month, account number, and balance for both accounts (Some non-needed cases used to make output look cleaner)
case 0:
System.out.println(month + " " + saver1.getAccountNumber() + " " + saver1.getBalance() + " " + month + " " + saver2.getAccountNumber() + " " + saver2.getBalance());
break;
case 4:
saver1.addInterest();
//saver2.addInterest();
System.out.println(month + " " + saver1.getAccountNumber() + " " + saver1.getBalance() + " " + month + " " + saver2.getAccountNumber() + " " + saver2.getBalance());
break;
case 10:
saver1.addInterest();
//saver2.addInterest();
System.out.println(month + " " + saver1.getAccountNumber() + " " + saver1.getBalance() + " " + month + " " + saver2.getAccountNumber() + " " + saver2.getBalance());
break;
case 11:
saver1.addInterest();
//saver2.addInterest();
System.out.println(month + " " + saver1.getAccountNumber() + " " + saver1.getBalance() + " " + month + " " + saver2.getAccountNumber() + " " + saver2.getBalance());
break;
case 12:
saver1.addInterest();
//saver2.addInterest();
double totalBalance = saver1.getBalance() + saver2.getBalance();
System.out.println(month + " " + saver1.getAccountNumber() + " " + saver1.getBalance() + " " + month + " " + saver2.getAccountNumber() + " " + saver2.getBalance());
break;
default:
saver1.addInterest();
//saver2.addInterest();
System.out.println(month + " " + saver1.getAccountNumber() + " " + saver1.getBalance() + " " + month + " " + saver2.getAccountNumber() + " " + saver2.getBalance());
break;
}
}*/
}
}
儲蓄賬戶 :
public class SavingsAccount {
// variables specific to SavingsAccount class
public double annualInterestRate;
private final int ACCOUNT_NUMBER;
public double balance;
//constructor with account number and balance parameters
public SavingsAccount(int account_number, double balance) {
this.ACCOUNT_NUMBER = account_number;
this.balance = balance;
}
//returns account number
public int getAccountNumber() {
return this.ACCOUNT_NUMBER;
}
//returns balance
public double getBalance() {
return this.balance;
}
//sets interest rate
public void setAnnualInterestRate (double interestRate) {
this.annualInterestRate = interestRate;
}
}
FlexibleSavingsAccount :
public class FlexibleSavingsAccount extends SavingsAccount{
public FlexibleSavingsAccount(int account_number, double balance) {
super(account_number, balance);
}
//returns interest
public double getInterest() {
return annualInterestRate;
}
}
您可能需要將getInterest添加為抽象方法,並將SavingsAccount聲明為抽象類。 那么您將擁有編譯器已知的方法來調用,並且您將被迫在子類中提供正確的實現
如果要將saver1
和saver2
聲明為SavingsAccount
類型, saver2
在父類SavingsAccount
聲明您的getInterest()
方法。
按照您顯示的方式,該方法僅適用於聲明為FlexibleSavingsAccount
類。
由於您將它們聲明為SavingsAccount
您只能訪問該類的方法。
子類可以訪問父類的方法,但不能相反。
您已將實例化的儲蓄帳戶聲明為SavingsAccount
類型。 他們將無法訪問方法getInterest()
因為該方法位於子類FlexibleSavingsAccount
。
您需要將它們實例化為希望它們實際成為的實際儲蓄帳戶:
FlexibleSavingsAccount saver1 = new FlexibleSavingsAccount(10002, 2000); //create new FlexibleSavingsAccount object
現在saver1
將能夠訪問getInterest()
。
額外的主意:
更好的方法是將父SavingsAccount
編碼為接口。 然后,您將在此接口中聲明getInterest()
方法,同時將方法中的詳細信息留給子類。
儲蓄賬戶:
public interface SavingsAccount {
public int getAccountNumber();
public double getBalance();
public void setAnnualInterestRate (double interestRate);
}
然后實例化您的帳戶:
SavingsAccount saver1 = new FlexibleSavingsAccount(10002, 2000); //create new FlexibleSavingsAccount object
請注意,這樣做還有一個好處,就是您可以將實例聲明為已編碼到SavingsAccount
接口,這對於將來驗證代碼始終是一個好主意。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.