【问题标题】:Can I access a child's method when it is classified as a parent?当孩子被归类为父母时,我可以访问孩子的方法吗?
【发布时间】:2021-01-29 22:36:13
【问题描述】:

例如,我有一个对象数组列表,这些对象都是父类型,但我想访问其中一个元素的子方法。这是我的代码:

ArrayList<Employee> staff = new ArrayList<Employee>();

for (Employee emp : staff) {
    if (emp.getType().equalsIgnoreCase("Manager")) {
        //use a method from the manager class with emp
    }
}

【问题讨论】:

  • 你的意思是Manager是一个扩展Employee的类吗?

标签: java object inheritance


【解决方案1】:

您必须使用 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(通常不会是合法声明,但它是这种强制转换。它是同一个对象,但现在分配给一个变量你想要的类型)。如果emp 没有引用管理器,则会抛出 ClassCastException。然后你就可以在 m 上随意调用你想要的任何东西了。

从java开始,呃.. 14? 15?你可以缩短这个:

if (emp instanceof Manager m) {
   // use m here
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-09
    • 1970-01-01
    相关资源
    最近更新 更多