使用运算符实例从父引用访问子类变量是否不好?

问题描述 投票:0回答:2

我有一个类,例如Person,有一些参数,例如nameage。 现在我想添加一些其他参数,例如就业。这些新参数仅对应用程序的一种模式有用。

所以我创建了一个子类,Employee,扩展了Person。并通过传递 Person 引用来重用所有公共代码。

Person p = new Employee();

但我想访问特定于员工的参数。我怎样才能实现这一目标?

我想过添加 instanceOf 并强制转换为 Employee,但这会导致许多 if else 条件。我还可以做些什么?如何重组以重用现有代码,但仍仅在应用程序的一种模式中使用新参数?

java inheritance classcastexception reusability
2个回答
1
投票

听起来您想为应用程序的特定模式向 Person 类添加特定参数(在本例中为就业),但您还想重用 Person 和 Employee 之间的公共代码。实现此目的的一种方法是使用组合和接口而不是继承。

为Person和Employee之间共享的公共属性和方法创建一个接口或抽象类。例如人类

创建一个具体类 Person,它实现 Human 接口并包含所有 Human 实例通用的属性和方法

创建一个单独的 Employee 类,它也实现 Human 接口并包含特定于员工的附加属性

现在,在您的应用程序中,您可以创建 Person 和 Employee 的实例并访问它们的特定属性,同时仍将它们视为 Human 对象


1
投票

在这种情况下我建议如果可能的话使用组合

您可以使用组合来代替继承。创建一个单独的Employment 类并将其添加为Person 类中的字段。这样,您可以在需要时访问就业详细信息,并且对于非员工来说可以为空。类似的东西

class Employment {
// employment details
}

class Person {
// ...
    private Employment employment;
// ...

}

或者使用接口来实现这一点,如下所示

interface Employable {
    String getEmploymentDetails();
}

class Employee extends Person implements Employable {
// ...
    @Override
    public String getEmploymentDetails() {
    // return employment details
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.