![](/img/trans.png)
[英]How can I access an attribute from a child class when the parent class is the reference type and passed through a method?
[英]Can I access a child's method when it is classified as a parent?
例如,我有一个 arraylist 对象,这些对象都是父类型,但我想访问其中一个元素的子方法。 这是我的代码:
ArrayList<Employee> staff = new ArrayList<Employee>();
for (Employee emp : staff) {
if (emp.getType().equalsIgnoreCase("Manager")) {
//use a method from the manager class with emp
}
}
您必须使用 cast 构造进行类型断言。 当我们讨论这个话题时,使用字符串类型的getType()
方法似乎是一个设计错误。 那应该是一个枚举,或者你可以完全摆脱它。 假设你有:
class Employee {}
class Manager extends Employee {}
然后:
for (Employee emp : staff) {
if (emp instanceof Manager) {
Manager m = (Manager) emp;
m.doManageryThings();
}
}
(Manager) emp
部分是一个类型断言:它的作用类似于m = emp
(通常不会是法律声明,但它是这种强制转换。它是相同的 object,但现在分配给类型的变量你自找的)。 如果emp
没有引用管理器,则会抛出 ClassCastException。 然后你可以自由地在 m 上调用任何你想要的东西。
从 java 开始,嗯.. 14? 15? 你可以缩短这个:
if (emp instanceof Manager m) {
// use m here
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.