Bra*_*rah 5 java inheritance arraylist instanceof
我有三个类,一个抽象用户和两个特定的:NormalUser,它包含一个或多个Address对象的ArrayList,可以是不同的(国内,国际,自定义等),然后是Admin类,它有一个返回true的方法.它们都包含更多彼此无关的方法.
abstract class User{
public User(String username, String pw){
...
}
public class NormalUser extends User{
...
private ArrayList<Address> addresses;
...
public void addAdress(ArrayList<Address> address){
addresses.addAll(address);
}
public class Admin extends User{
...
public boolean getIsAdmin(){
return true;
}
}
Run Code Online (Sandbox Code Playgroud)
现在在另一个类中,如果我像这样制作4个用户对象:
ArrayList<User> users;
users.add(new NormalUser( "1", "pw");
users.add(new NormalUser( "2", "pw");
users.add(new NormalUser( "3", "pw");
users.add(new NormalUser( "4", "pw");
users.add(new Admin("5", "pw"));
users.add(new NormalUser( "6", "pw");
Run Code Online (Sandbox Code Playgroud)
并说我想在NormalUser中使用addAddress方法,然后我必须将用户中的specfic用户向下转换为NormalUser,然后才能在NormalUser中使用addAddress方法,如下所示:
if (user instanceof NormalUser){
NormalUser normal = (NormalUser) user;
normal.addAddress(...)
}
Run Code Online (Sandbox Code Playgroud)
我希望NormalUser和Admin都成为用户的原因是我可以在登录时一起处理它们.
我想到将addEmail添加到User类,然后在NormalUser类中重写它,但是我必须为NormalUser类中的每个方法执行此操作,而且Admin也会从User继承它,当它不需要时功能.
问题1:有没有更好的方法来实现这一点,因为我听说使用instanceof是一件坏事?每次我使用特定于NormalUser类的方法时,我都必须使用instanceof.
问题2:对象的ArrayList是否是将RegularUser链接到特定地址/(对象)的最佳方法?
目前没有涉及数据库.
例如,用户a有2个地址,一个国内,一个国际,用户b只有国内地址,用户c有国内和自定义地址等.
谢谢.
PS.我已经广泛搜索过以前的帖子,但还没有找到解决方案.在我的两本Java书中,他们都展示了使用instanceof的例子,但没有提到它是一种不好的做法.