2015-10-20 74 views
0

我有一个Shop类,它有一个Worker类型的数组列表,我有两个类从Worker中继承(扩展),称为Stocker和Cashier。访问ArrayList中的子类变量?

我斯托克类添加变量

int stamina; 

我的出纳类添加变量

int patience; 

在店,我有型工人的命名工人一个ArrayList,我的问题是:

1)将Stocker和Cashier类型的对象添加到工人中,尽管它们都从Worker类延伸出来,这是错误的吗?

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

workers.get(0).getStamina(); 

(知道一个事实,我已经在索引0添加类类型施特克尔到我的ArrayList) - 然而,这并不工作..

我怎样才能自由访问和使用超类型的ArrayList中的这些子类?

回答

2

你必须投下WorkerStocker做到这一点:

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

然而,你可能要考虑改变你的设计,使您不必不同类型的项目清单。

+0

所以要3周不同的ArrayList?一个工人,仓库和收银员?使用超类的子类来创建ArrayList是错误的吗? – Hazim

+0

如果你有一个ArrayList,你通常应该以相同的方式使用这些元素。既然你想调用不同的方法,3个列表可能会更好 –

1

ArrayList可以将Worker和Stocker存储在同一个集合中,但是如果您说ArrayList<Worker>那么集合只知道Worker和Stockers。

你需要的东西,如:

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