Java多态方法

mga*_*mer 0 java polymorphism

在Java中,我有一个名为Operation的抽象类,以及三个名为OperationActivation,OperationPayment和OperationSendEmail的子类.

添加自评论:操作*对象是EJB实体Bean,因此我不能在其中包含业务逻辑.

不,我想创建这样的处理器类:

public class ProcessOperationService {

public void processOperation(Operation operation) {
    out.println("process Operation");
    process(operation);
}

public void process(OperationActivation operationActivation) {
    out.println("process Activation");
}

public void process(OperationPayment operationPayment) {
    out.println("process Payment");
}

public void process(OperationSendEmail operationSendEmail) {
    out.println("process OperationSendEmail");
}        
Run Code Online (Sandbox Code Playgroud)

}

处理每个操作需要不同的逻辑,所以我想有三种不同的方法,每个操作一个.

当然这段代码不能编译.我错过了什么或不能这样做吗?

Avi*_*Avi 5

您正在混合重载和多态方法处理.当您基于参数类型重载方法时,即静态多态.应该从编译时知道类型是什么的代码调用这些方法.您可以执行以下操作,但它不是干净的面向对象的代码:

public class ProcessOperationService {

public void processOperation(Operation operation) {
    out.println("process Operation");
    if (operation instanceof OperationActivation)
        process((OperationActivation)operation);
    else if (operation instanceof OperationPayment)
        process((OperationPayment)operation);
    ...
}

public void process(OperationActivation operationActivation) {
    out.println("process Activation");
}
...
}
Run Code Online (Sandbox Code Playgroud)

通过像Brian Agnew所建议的那样让自动运行时多态性工作,并使进程成为每个Operation子类本身的方法会好得多.