我有4节课
public class User {
private Account account;
public void setAccount(Account account) {
this.account = account;
}
public Account getAccount() {
return this.account;
}
}
public abstract class Account {
private double balance;
private String password;
private String userName;
private String mobileNumber;
private Provider provider;
// some getters and setters
}
public class BankAccount extends Account {
// this not in the parent class
private String accountNumber;
public String getAccountNumber() {
return accountNumber;
}
public void setAccountNumber(String accountNumber) {
this.accountNumber = accountNumber ;
}
}
public class WalletAccount extends Account {
}
我如何重新设计它以使其成为这样
Account account = new BankAcccount() ;
account.getAccountNumber() ;
不使用
或类似的铸造instanceof
((BankAccount) account)getAccountNumber() ;
重新设计类以允许调用
BankAccount
方法,而无需使用 instanceof
或转换。
你不能。没有办法做到这一点。只有
BankAccount
类型的东西——必须强制转换为它——才能调用 getAccountNumber()
。
在简单的情况下,您可以向父类添加
abstract
方法。
public abstract class Account {
private double balance;
private String password;
private String userName;
private String mobileNumber;
private Provider provider;
// some getters and setters
public abstract String getAccountNumber();
}
这使得
accountNumber
属性变得抽象。每个非抽象子类都应该实现 Account
类的抽象方法。
然后就可以使用了
Account account = new BankAcccount() ;
account.getAccountNumber() ;
不使用
或类似的铸造instanseof
((BankAccount) account)getAccountNumber() ;
这是允许的,因为
abstract
方法可以使用多态性。