ある処理フローの大まかな流れ (Template Method) をAbstractClassに記述しておき、実際の具体的な処理はConcreteClassに記述します。システムのフレームワークを実装する場合等に用いられます。
サンプルコード
sample.java
abstract class AbstractClass {
public abstract void task1();
public abstract void task2();
public final void taskFlow() { //final修飾子 (継承先でオーバーライド不可)
task1();
task2();
}
}
class ConcreteClass1 extends AbstractClass {
private int val;
public ConcreteClass1(int val) {this.val=val;}
public void task1() {System.out.println(val+val);}
public void task2() {System.out.println(val*val);}
}
class ConcreteClass2 extends AbstractClass {
private int val;
public ConcreteClass2(int val) {this.val=val;}
public void task1() {System.out.println(val-val);}
public void task2() {System.out.println(val/val);}
}
class Sample {
public static void main(String args[]) {
AbstractClass obj1 = new ConcreteClass1(1);
AbstractClass obj2 = new ConcreteClass2(1);
obj1.taskFlow();
obj2.taskFlow();
}
}
実行例
$ javac sample.java && java Sample
2
1
0
1
0
Javaちょっとできるプログラマ。教育業界のエンジニアです。
記事の執筆者にステッカーを贈る
有益な情報に対するお礼として、またはコメント欄における質問への返答に対するお礼として、 記事の読者は、執筆者に有料のステッカーを贈ることができます。
さらに詳しく →Feedbacks
ログインするとコメントを投稿できます。





