我有一个类,例如Person,有一些参数,例如name和age。 现在我想添加一些其他参数,例如就业。这些新参数仅对应用程序的一种模式有用。
所以我创建了一个子类,Employee,扩展了Person。并通过传递 Person 引用来重用所有公共代码。
Person p = new Employee();
但我想访问特定于员工的参数。我怎样才能实现这一目标?
我想过添加 instanceOf 并强制转换为 Employee,但这会导致许多 if else 条件。我还可以做些什么?如何重组以重用现有代码,但仍仅在应用程序的一种模式中使用新参数?
听起来您想为应用程序的特定模式向 Person 类添加特定参数(在本例中为就业),但您还想重用 Person 和 Employee 之间的公共代码。实现此目的的一种方法是使用组合和接口而不是继承。
为Person和Employee之间共享的公共属性和方法创建一个接口或抽象类。例如人类
创建一个具体类 Person,它实现 Human 接口并包含所有 Human 实例通用的属性和方法
创建一个单独的 Employee 类,它也实现 Human 接口并包含特定于员工的附加属性
现在,在您的应用程序中,您可以创建 Person 和 Employee 的实例并访问它们的特定属性,同时仍将它们视为 Human 对象
在这种情况下我建议如果可能的话使用组合
您可以使用组合来代替继承。创建一个单独的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
}
}