2

私はJavaで簡単なWebブラウザを書いています。JEdi​​torPaneを拡張し、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);
}
}

明らかに、これは抽象クラスのメソッドがオーバーライドされることを保証するものではないので、あまり良い解決策ではないことに気づきました。代わりにインターフェースを使用してこれを達成する方法はありますか?

4

2 に答える 2

1

問題は、インターフェースがJEditorPaneを拡張できないことです。ただし、abstracクラスで抽象メソッドを宣言すると、コンパイラーはすべての子クラスにそれらをオーバーライドするように強制します。

import javax.swing.JEditorPane;

public abstract class AbstractBrowser extends JEditorPane {
    public abstract void back();
    public abstract void forward();
    public abstract void refresh();
}
于 2012-12-12T17:24:58.477 に答える
1

サブクラスにJEditorPaneを拡張させてから、現在の抽象クラスと同じインターフェイスを作成し、サブクラスにもそのインターフェイスを実装させることができます。

于 2012-12-12T17:26:28.787 に答える