最初のアプローチとして、これはユーザーが継承の代わりに構成を使用できるようにするために行われると考えることができます。これは、クラスがすでに別のクラスから継承し、Observableクラスからも継承できない場合に非常に便利です。
しかし、Observableのソースコードを見ると、内部フラグがあることがわかります
private boolean changed = false;
これは、notifyObserversが呼び出されるたびにチェックされます。
public void notifyObservers(Object arg) {
Object[] arrLocal;
synchronized (this) {
if (!changed) return;
arrLocal = obs.toArray();
clearChanged();
}
for (int i = arrLocal.length-1; i>=0; i--)
((Observer)arrLocal[i]).update(this, arg);
}
ただし、このObservableで構成されるクラスからは、このフラグを変更することはできません。これはプライベートであり、変更するために提供されるメソッドが保護されているためです。
これは、ユーザーがObservableクラスをサブクラス化することを余儀なくされていることを意味し、「abstract」キーワードの欠如は単なる「間違い」であると言えます。
このクラスは完全な失敗だと思います。