从父类变量调用子类方法,而不使用instanceof或casting

问题描述 投票:0回答:2

我有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
或转换。

java oop inheritance polymorphism
2个回答
1
投票

你不能。没有办法做到这一点。只有

BankAccount
类型的东西——必须强制转换为它——才能调用
getAccountNumber()


0
投票

在简单的情况下,您可以向父类添加

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
方法可以使用多态性

© www.soinside.com 2019 - 2024. All rights reserved.