Java 通过将其声明为SavingsAccount,您(编译器)所知道的是它至少是一个SavingsAccount,并且SavingsAccount没有getInterest()方法。它不能做任何其他的假设,我想我不明白。通过扩展类,您应该可以访问父类的成员。你有
Java 通过将其声明为SavingsAccount,您(编译器)所知道的是它至少是一个SavingsAccount,并且SavingsAccount没有getInterest()方法。它不能做任何其他的假设,我想我不明白。通过扩展类,您应该可以访问父类的成员。你有,java,variables,methods,Java,Variables,Methods,通过将其声明为SavingsAccount,您(编译器)所知道的是它至少是一个SavingsAccount,并且SavingsAccount没有getInterest()方法。它不能做任何其他的假设,我想我不明白。通过扩展类,您应该可以访问父类的成员。你有错误吗?是的。如果查看我发布的最后一小段代码,getInterest()方法应该返回对象的AnnualInterest。在本例中,我有两个SavingsAccount类型的对象(“saver1”和“saver2”)。当我运行代码时,我得到以下错
通过将其声明为
SavingsAccount
,您(编译器)所知道的是它至少是一个SavingsAccount
,并且SavingsAccount
没有getInterest()
方法。它不能做任何其他的假设,我想我不明白。通过扩展类,您应该可以访问父类的成员。你有错误吗?是的。如果查看我发布的最后一小段代码,getInterest()方法应该返回对象的AnnualInterest。在本例中,我有两个SavingsAccount类型的对象(“saver1”和“saver2”)。当我运行代码时,我得到以下错误:找不到符号(参考主类saver1.getInterest()和saver2.getInterest()中的部分。您将无法从SavingsAccount
对象中运行getInterest()
。SavingsAccount
没有getInterest()
已定义。如果要使用该方法,必须将对象初始化为FlexibleSavingsAccount
或CDSavingsAccount
这是为什么?我是否必须声明另外两个FlexibleSavingsAccount类型的对象?我想我可以使用SavingsAccount对象,因为其他类都是从该类扩展而来的。通过将其声明为SavingsAccount
,您(编译器)只知道它至少是SavingsAccount
,并且SavingsAccount
没有getInterest()
method。它不能做任何其他假设。不确定你所说的未来验证代码是什么意思?在这里创建一个接口会释放可以包含在基类中的共享行为,并迫使作者编写代码两次,如果需要更改,则需要两次维护,如果需要输入错误,则需要两次?是的ract基类而不是interface可以处理这个问题。我可能会同时做一个接口和一个抽象基类。不确定你所说的未来验证代码是什么意思?在这里创建一个接口会释放基类中可能包含的共享行为,并迫使作者编写两次代码,如果需要,还需要两次维护更改并输入2次错误?是的,一个抽象基类而不是接口将处理此问题。我可能会同时执行接口和抽象基类。
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;
}
}
public class FlexibleSavingsAccount extends SavingsAccount{
public FlexibleSavingsAccount(int account_number, double balance) {
super(account_number, balance);
}
//returns interest
public double getInterest() {
return annualInterestRate;
}
}
FlexibleSavingsAccount saver1 = new FlexibleSavingsAccount(10002, 2000); //create new FlexibleSavingsAccount object
public interface SavingsAccount {
public int getAccountNumber();
public double getBalance();
public void setAnnualInterestRate (double interestRate);
}
SavingsAccount saver1 = new FlexibleSavingsAccount(10002, 2000); //create new FlexibleSavingsAccount object