我认为通过代码解释我的问题更容易。
假设一个销售公司有两名销售人员,例如:
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()...
}
这个方法对吗?有谁能提出另一个解决方案,因为我觉得我做错了什么,因为这感觉像是一个变化的例子。谢谢!
1条答案
按热度按时间anauzrmj1#
面向对象编程的全部目的是,每个(子)类都知道自己的行为。不需要在运行时检测对象的特定类。如果您觉得有必要检测对象的类,那么它表明您的设计中有问题。
不同类型的员工应该知道如何计算佣金:
然后你可以通过所有员工找到最低佣金: