メソッドを定義するいくつかのクラスがあり、そのメソッドの周りでいくつかのコード (たとえば、いくつかの「プロローグ」と「エピローグ」) を実行したいと考えています。
public interface Thing {
public void stuff();
public void callStuff();
}
public abstract class Something implements Thing {
public abstract void stuff();
public void callStuff() {
... // common prologue
//try {
stuff();
//} finally {
... // common epilogue
//}
}
}
public class A extends Something {
public void stuff() { ... }
}
public class B extends Something {
public void stuff() { ... }
}
public class Wrapper extends Thing {
private Thing t;
Wrapper(Thing thing) { t = thing; }
public void stuff() { t.stuff(); }
public void callStuff() { t.callStuff(); }
}
// Use:
Something s = ...;
s.callStuff();
クライアントstuff()
がcallStuff()
. それにもかかわらず、まれに を呼び出さなければならない場合があります。上記stuff()
を参照してください。Wrapper
クラスで見られるようなものThread
(JDK 1.0 以降)、子クラスは再定義run()
しますが、クライアントは を呼び出しstart()
ます。
stuff()
クライアントが直接電話をかけないようにするにはどうすればよいですか?
編集
protected
Something
「クライアント」は実際には別のチームによってコード化されたの子であるため、ここでは機能しません。@Deprecated
機能しますが、stuff()
実際には非推奨ではなく、「非推奨」とは何かを誰もが知っているため、の意味を再定義することはできません@Deprecated
。
理想的には、問題を無視する明示的な指示がない限り、コンパイルは失敗するはずです。