将ChildClass对象添加到ArrayList [重复]

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

如果我们有一个User基类,其属性为usernamepassword

和一个儿童班SpecialUser,额外的财产special

我知道我可以声明ArrayList<User> users = new ArrayList<User>();然后将SpecialUser对象添加到users,但我只能访问从基类继承的属性(usernamepassword)。

有没有办法将SpecialUser添加到ArrayList并能够访问special属性?或者他们应该单独存储?

亲切的问候

java inheritance arraylist
2个回答
4
投票

当然,你绝对可以!

在获得对象后,将其强制转换为SpecialUser:

SpecialUser spUser = (SpecialUser) users.get(0);

如果您不确定用户是否为SpecialUser,请在测试之前:

if (users.get(0) instanceof SpecialUser) {
    SpecialUser spUser = (SpecialUser) users.get(0);
    // ....
}

0
投票

如果你真的需要,你可以用instanceof做到:

User user = users.get(0);
if (user instanceof SpecialUser) {
    SpecialUser sUser = (SpecialUser) user; // class casting
    sUser.getSpecial(); // whatever subclass call you need
}

你真的需要这个吗?良好的多态性是关于使用User -s方法并在子类中做一些特殊的事情。

通常我们更喜欢没有instanceof的代码。但有时这是正确的选择。这取决于你的实际问题。

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