次の抽象クラスがあります。
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()
メソッドが呼び出されたかどうかを確認する方法はありますか?