我有以下抽象类:
public abstract class AbstractCreateActionHandler {
protected IWorkItem mCurrentWI;
public AbstractCreateActionHandler(IWorkItem wi) {
this.mCurrentWI = wi;
}
public final void invoke() {
try {
if (checkForLockingFile()) {
this.executeAction();
Configuration.deleteInstance();
}
} catch (IOException e) {
Configuration.deleteInstance();
e.printStackTrace();
}
}
protected abstract void executeAction();
private boolean checkForLockingFile() throws IOException {
String path = Configuration.getInstance().getProperty("path");
File lock = new File(path + "lock_"+mCurrentWI.getId()+"__.tmp");
if(!lock.exists()) {
lock.createNewFile();
return true;
}
return false;
}
}
子类扩展抽象类:
public class MyAction extends AbstractCreateActionHandler {
public MyAction(IWorkItem wi) {
super(wi);
}
@Override
protected void executeAction() {
// Implementation
}
// ALSO POSSIBLE...
/* @Override
public void executeAction() {
// Implementation
}*/
}
问题:
扩展抽象类和实现executeAction()
方法的开发人员是否可能不允许更改可见性executeAction()
?
目前,开发人员可以简单地将方法的可见性更改为“public”,创建子类的对象并调用executeExtion()
。可见性修饰符可以更改,抽象方法仍被接受为“已实现”。
invoke()
因此可以绕过在抽象类方法中执行的“正常”调用顺序和检查。有没有办法检查该invoke()
方法是否被调用?