我是第一次使用抽象类在Java中编写代码而且我遇到了问题。我有一个用户列表(数组),每个用户都是userClass的对象。我创建了一个抽象类'account'和2个类,它们扩展了'basicAccount'和'premiumAccount',我想根据输入为每个用户创建基本或高级帐户。我的问题是我不知道如何实现userClass,因此根据字符串'accountType'创建基本或高级类的对象示例:
public class userClass {
private String email;
private String accountType;
private account account;
public userClass(String email, String accountType){
this.setEmail(email);
this.setAccountType(accountType);
if(accountType.equals("Basic")){
basicAccount account = new basicAccount();
}
else if(accountType.equals("Premium")){
premiumAccount account = new premiumAccount();
}
}
你能帮帮我吗?我可以把那些if放在userClass方法中吗?
答案 0 :(得分:2)
面向对象编程中一个非常重要的概念是多态。如果A和B遵循这些规则中的任何一个,多态性允许您使用对象A,就好像它是另一个类型B的实例
在您的情况下,第一条规则适用。 basicAccount
和premiumAccount
都是account
的子类。因此,您可以将自己的高级帐户和基本帐户对象用作帐户对象!所以只需将新创建的对象分配到account
字段!
if(accountType.equals("Basic")){
basicAccount account = new basicAccount();
this.account = account; // This works! Don't worry!
}
else if(accountType.equals("Premium")){
premiumAccount account = new premiumAccount();
this.account = account;
}
但副作用是,在将basicAccount
和premiumAccount
个对象用作account
后,您无法访问basicAccount
和premiumAccount
的方法直接访问this.account
。
如果确实想要这样做,请尝试以下方法:
假设您在doStuff
中定义了basicAccount
方法,并且您想要调用它:
this.account.doStuff();
这不起作用,因为this.account
的类型为account
而account
未定义名为doStuff
的方法。
您需要做的是检查account
字段是否为basicAccount
类型:
if (this.account instanceof basicAccount)
在if语句中,将this.account
强制转换为basicAccount
并调用方法:
((basicAccount)this.account).doStuff();
答案 1 :(得分:1)
这样的事可能会这样做:
public class UserClass{
Account account;
public UserClass(String accountType){
if(accountType.equals("Basic"){
this.account = new basicAccount();
} else {
this.account = new premiumAccount();
{
}
}