我有一个超类,它的子类有一个通用方法,这个方法在内部调用一个抽象方法。代码工作正常,但帮助我决定这个设计是否正常。
所有子类都在执行相同的操作,但它们为不同的客户端提供服务。所以我不能把所有其他方法都放在超类中。这种多态方法是否允许?
以下代码:
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,这可以吗?
谢谢大家
答案 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)
从你的问题中可能不是那么清楚(可能有些代码可以帮助:)),但是这似乎是一种可接受的方法,因为消费者并不关心使用哪个子类,因为它们都是从相同的抽象基础继承的类。
您也可以考虑使基类实现一个接口,这样您就可以与实现脱钩,并且只需要满足接口的联系。
如果您发现需要另一个实现(由于某种原因)仅通过覆盖抽象方法无法令人满意地实现,这可能会有所帮助。如果你只依赖于接口,那么你可以提供另一个不是从超类派生的实现,但仍然实现了接口,一切都还可以。