What? そもそもサブクラスとは?
サブクラスは特性を追加したり、振る舞いを変えたりするために作るもの。
例えば、以下のようなケース。
```.java
abstract class Person {
public abstract String getCode();
public abstract boolean isMale();
}
class Male extends Person {
@Override
public String getCode() {
return "M";
}
@Override
public boolean isMale() {
return true;
}
}
class Female extends Person {
@Override
public String getCode() {
return "F";
}
@Override
public boolean isMale() {
return false;
}
}
```
この場合は、性別によって返すコードを変更するためにサブクラスが使われています。
親クラスにアクセサを定義し、サブクラスごとに異なる値を返しています。
Why?
上記の例では、サブクラスがハードコードされた値をそれぞれ返しています。
これをConstant Methodパターンと言います。
Constant Methodしかないクラスは存在価値が低いです。
Constant Methodで返されるそれぞれの値を親クラスにフィールドを設置することで代替できます。
How?
class Person {
String code;
boolean isMale;
private Person(String code, boolean isMale) {
this.code = code;
this.isMale = isMale;
}
static Person createMale() {
return new Person("M", true);
}
static Person createFemale() {
return new Person("F", false);
}
}
// ↓client code
public static void main(String[] args) {
Person karl = Person.createMale();
}