我有一个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中自由访问和使用这些子类答案 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();