実行時に、TableA、TableB、または TableC が作成される場合があります。
public class TableA {
public void methodA() {
doSomethingA();
}
public void methodB() {
doSomethingB();
}
}
public class TableB extends TableA {
@Override
public void methodA() {
}
protected void methodC() {
}
}
public class TableC extends TableA {
@Override
public void methodB() {
}
public void methodD() {
}
}
TableX という別のテーブルがあります。
public class TableX extends TableA {
public void methodX() {
}
public void methodY() {
}
}
今、TableX の機能が必要です。methodX()、methodY() は、TableB、TableC に適用されます。
これらはTableX固有のモジュール機能であるため、methodX()、methodY()を取り出してTableAに入れることはできません。
そのため、実行時に TableA、TableB、TableC、TableX(TableA)、TableX(TableB)、TableX(TableC) が作成される場合があります。どのようなデザイン パターンも適用できるので、どのようなテーブルを作成しても、それが TableA から拡張されている限り、TableX もそれをサポートできます。