在父类泛型/java/oop的迭代过程中找到正确的子类

rfbsl7qr  于 2021-06-30  发布在  Java
关注(0)|答案(1)|浏览(375)

我认为通过代码解释我的问题更容易。
假设一个销售公司有两名销售人员,例如:

public class Employee()
{
private int salary;
}
public class SalesEmployee1 extends Employee()
{
private int commisionRate;

}

public class SalesEmployee2 extends Employee()
{
private int commisionRate;
}

假设我有一个向量: Vector<Employee> v = new Vector<>(); 我需要迭代这个向量,找到佣金最低的salesemployee1(每个salesemployee1的计算方式不同,所以佣金也不同)。如果不使用instanceof,我如何询问自己是否是销售人员?我想在父类中添加一个每个子类都重写的函数

public boolean myClass(String name)
{
    return name.equals(ClassName for example SalesEmployee1);
}

而不是这样做:

for(Employee e : v)
{
    if(e.myClass("SalesEmployee1")
         doSmth()...
}

这个方法对吗?有谁能提出另一个解决方案,因为我觉得我做错了什么,因为这感觉像是一个变化的例子。谢谢!

anauzrmj

anauzrmj1#

面向对象编程的全部目的是,每个(子)类都知道自己的行为。不需要在运行时检测对象的特定类。如果您觉得有必要检测对象的类,那么它表明您的设计中有问题。
不同类型的员工应该知道如何计算佣金:

public class Employee()
{
    abstract int calculateCommission();
}
public class SalesEmployee1 extends Employee()
{
    int calculateCommission() { ... }

}

public class SalesEmployee2 extends Employee()
{
    int calculateCommission() { ...}
}

然后你可以通过所有员工找到最低佣金:

for(Employee e : v) {
    int commission = e.calculateCommission();
    // do something with the commission;
}

相关问题