【问题标题】:Adding ChildClass object to ArrayList<BaseClass> [duplicate]将子类对象添加到 ArrayList<Base Class> [重复]
【发布时间】:2018-08-11 01:13:08
【问题描述】:

如果我们有一个具有usernamepassword 属性的User 基类。

还有一个子类SpecialUser,还有一个额外的属性special

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

有没有办法将 SpecialUser 添加到 ArrayList 并能够访问 special 属性?还是分开存放?

亲切的问候

【问题讨论】:

    标签: java inheritance arraylist


    【解决方案1】:

    当然可以!

    在你获得对象之后,cast它给SpecialUser:

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

    如果不确定User是否为SpecialUser,先测试一下:

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

    【讨论】:

      【解决方案2】:

      如果你真的需要,你可以使用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 的代码。但有时这是正确的选择。这取决于您的实际问题。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-08-10
        • 2016-10-31
        • 2012-12-20
        • 2017-11-04
        • 1970-01-01
        • 1970-01-01
        • 2013-04-13
        • 2017-12-12
        相关资源
        最近更新 更多