我是Java的新手,正在研究一个显示继承的简单程序。我在访问派生类中的方法时遇到问题,因为我的变量定义似乎不使用子类名称,而是使用超类名称(Accounts)。为什么当我调用存款方法时,找不到符号错误?
import java.util.*;
import java.text.*;
public class Accounter {
static Scanner input = new Scanner(System.in);
static Accounts myAccount;
public static void main(String[] args) {
int result; //holder for user input
double amount; //holder for desposits and withdrawals
System.out.println("What kind of account would you like to setup?");
System.out.println("Checking[1] or Savings[2]");
result = input.nextInt();
if(result == 1) {
myAccount = new Checking();
} else {
myAccount = new Savings();
}
myAccount.deposit(199.99);
}
}
class Accounts {
double balance;
public String accountName;
public Date dateOpened;
public Date today = new Date();
public Accounts() {
dateOpened = today;
}
public Date getDateOpened() {
return dateOpened;
}
public double getBalance() {
return balance;
}
}
class Checking extends Accounts {
public void deposit(double amount) {
this.balance = this.balance + amount;
}
}
class Savings extends Accounts {
public void deposit(double amount) {
this.balance = this.balance + amount;
}
}
答案 0 :(得分:3)
将class Accounts
声明为abstract
。
在此课程中将double balance
声明为protected
字段。
在此课程中将public void deposit(double amount)
声明为abstract
方法。
答案 1 :(得分:1)
存款未在您的基类中定义,您应该做的是,
在基类中定义此方法并在子类中覆盖它。
public class Accounts{
public void deposit(double amount) {
}
}
class Checking extends Accounts {
@Override
public void deposit(double amount) {
this.balance = this.balance + amount;
}
}
答案 2 :(得分:0)
myAccount
是Accounts
的一个实例,它是您的基类。
您无法直接从对基类的引用中访问派生类中的方法。
要调用该方法,您需要转换为所需的派生类:
if(result == 1) {
myAccount = new Checking();
} else {
myAccount = new Savings();
}
if(myAccount instanceof Checking)
(Checking)myAccount.deposit(199.99);
else if(myAccount instanceof Savings)
(Savings)myAccount.deposit(199.99);
... 但是 ......
由于派生类共享相同的方法,因此最好在基类Accounts
类中定义该方法,如下所示:
class Accounts {
...
public void deposit(double amount) {
this.balance = this.balance + amount;
}
}
然后像原来那样打电话给你的方法。这样您就不必检查myAccount
是否是一个派生类或另一个派生类的实例。如果您需要在将来的派生类中更改该方法的行为,则可以覆盖它。