访问ArrayList中的子类变量?

时间:2015-10-20 23:27:50

标签: java inheritance arraylist

我有一个Shop类,它有一个类型为Worker的数组列表,我有两个从Worker继承(扩展)的类,名为Stocker和Cashier。

我的Stocker类添加了变量

int stamina;

我的Cashier类添加了变量

int patience;

在Shop中,我有一个名为Worker类型的ArrayList,我的问题是:

1)将Stocker和Cashier类型的对象添加到工作者中是不是错误,即使它们都是从Worker类扩展的?

2)如何从ArrayList访问子类的变量?我试过用:

workers.get(0).getStamina();

(知道我在索引0处向我的ArrayList添加了一类Stocker类型的事实) - 但是这不起作用..

如何从类型超类?

的ArrayList中自由访问和使用这些子类

2 个答案:

答案 0 :(得分:2)

您必须将Worker投射到Stocker才能执行此操作:

((Stocker) workers.get(0)).getStamina();

但是,您可能需要考虑更改设计,以便没有不同类型的项目列表。

答案 1 :(得分:1)

ArrayList可以将Workers和Stockers存储在同一个集合中,但是如果你说ArrayList<Worker>那么该集合只知道有关Workers而不是Stockers。

您需要以下内容:

Worker worker = workers.get(0);
if (worker instanceof Stocker)
{
    Stocker stocker = (Stocker)worker;
    //stocker.getStamina();