JavaのObservableではマルチ継承の解決方法はサポートされていません


    Java   , Swing     ,    UI           。  java.util             Observable Observer。

しかし、Swingベースのグラフィックプログラムであれば、Swingコントロールを継承したクラスでObservableをどのように継承するのでしょうか.
単一継承Javaでは,答えは不可能である.
引き継ぐことができなくて、組み合わせを使いました.
次に、JPanelを例に挙げます.
public class ObservablePanel extends JPanel {
	
	//      ,    。
	protected Observable notifier = new Observable();
	
	//    
	
}

しかし、使用時にはnotifierのsetChanged方法は?全然ないでしょ?
ドキュメントを調べるとsetChangedはprotectedメソッドで、外部では呼び出せません.
そこで、私たちは自分でそんなに愚かではないObservableを実現しましょう.
public class NotStupidObservable extends Observable {

	@Override
	public/*   protected*/ synchronized void setChanged() {
		// TODO Auto-generated method stub
		super.setChanged();
	}
	
}

このNotStupidObservableクラスではsetChangedメソッドを書き換え,その権限を拡張し,外部でnotifier.setChanged()メソッドを呼び出すことができるようにした.
次に、ObservablePanel内のnotifierをNotStupidObservableと宣言します.
public class ObservablePanel extends JPanel {
	
	//      ,    。
	protected NotStupidObservable notifier = new NotStupidObservable();
	
	//    
	
}

問題は解決した.
新しいスキルget:
1.継承された場所を使用できない場合は、組合せを使用することも考えられます.(OOPデザインでは優先組み合わせだったそうです?)
2.子は親の書き換え方法を継承してアクセス権を拡大できますが、縮小することはできません.そうしないと、ディミットの原則に違反します.