这种多态行为可以吗?

时间:2011-11-29 16:21:33

标签: java

我有一个超类,它的子类有一个通用方法,这个方法在内部调用一个抽象方法。代码工作正常,但帮助我决定这个设计是否正常。

所有子类都在执行相同的操作,但它们为不同的客户端提供服务。所以我不能把所有其他方法都放在超类中。这种多态方法是否允许?

以下代码:

class A{
public void insertEmployee(Employee emp){
}
public void updateEmployee(Employee emp){
}
public void deleteEmployee(Employee emp){
}

public collection getAll(){
    getAllHelper();
    return collection;
}

public collection  getAllHelper(){
    return collection;
}

}


class B{

public void insertEmployee(Department emp){
}

public void updateEmployee(Department emp){
}

public void deleteEmployee(Department emp){
}
public collection getAll(){
    getAllHelper();
    return collection;
}
public collection  getAllHelper(){
    return collection;
}
}

然后我介绍了一个新的课程

abstract class c{
public collection getAll(){
  return collection;
}
public abstarct collection getAllHelper();
}

所以A和B扩展了C,这可以吗?

谢谢大家

2 个答案:

答案 0 :(得分:1)

“所有子类正在执行相同的操作”

并不清楚您的意思

如果所有子类都执行相同的功能(执行相同的代码),则不存在多态性。

如果您的行为中的子类彼此不同,但仍然使用相同的方法签名来覆盖基类行为,那么多态性就会发挥作用。

例如:

Class Base { abstract void doWork() }, 
Class A extends Base
{
 void doWork() { Read from file and process }
} 

Class B extends Base
{
 void doWork { Read from Network and process }
}

有一个代码片段,它采用Base对象的集合 并且在不知道确切的子类型的情况下逐个执行它们。

Class Processor{
 void process ( List<Base> baseList)
 {
   for ( Base b: baseList){
    b.doWork();
    // Note: This is where polymorphism comes into action
    // At run-time A or B instances will be executed with appropriate doWork methods
   }
 }
}

在这种情况下,方法doWork的多态行为发挥作用。 http://en.wikipedia.org/wiki/Polymorphism_in_object-oriented_programming

答案 1 :(得分:0)

从你的问题中可能不是那么清楚(可能有些代码可以帮助:)),但是这似乎是一种可接受的方法,因为消费者并不关心使用哪个子类,因为它们都是从相同的抽象基础继承的类。

您也可以考虑使基类实现一个接口,这样您就可以与实现脱钩,并且只需要满足接口的联系。

如果您发现需要另一个实现(由于某种原因)仅通过覆盖抽象方法无法令人满意地实现,这可能会有所帮助。如果你只依赖于接口,那么你可以提供另一个不是从超类派生的实现,但仍然实现了接口,一切都还可以。