私はJavaで簡単なWebブラウザを書いています。JEditorPaneを拡張し、Webページをより適切に表示するように設定するWebBrowserPaneクラスがあります(編集を無効にしたり、HyperlinkListenerを追加したりします)。次に、クラスWebBrowserFrameがあります。これは、JFrameを拡張し、いくつかのボタンとアドレスバーを上部に配置し、WebBrowserPaneを下部に配置します。ただし、WebBrowserPaneを下に配置することしかできないのではなく、JEditorPaneを拡張し、関連するメソッドを備えたものなら何でも使用できるようにしたいと思います。
これを実現するために、抽象クラスAbstractBrowserを作成しました。
import javax.swing.JEditorPane;
public abstract class AbstractBrowser extends JEditorPane {
public void back(){}
public void forward(){}
public void refresh(){}
}
次に、WebBrowserPaneはAbstractBrowserを拡張します。
public class WebBrowserPane extends AbstractBrowser {
WebBrowserPane(){
setEditable(false);
//etc
}
public void back(){
//blah
}
}
次に、WebBrowserFrameは任意のAbstractBrowserをパラメーターとして受け取ります。
public class WebBrowserFrame extends JFrame{
WebBrowserFrame(AbstractBrowser a){
add(a);
}
}
明らかに、これは抽象クラスのメソッドがオーバーライドされることを保証するものではないので、あまり良い解決策ではないことに気づきました。代わりにインターフェースを使用してこれを達成する方法はありますか?