接口相当于这个抽象类

时间:2012-12-12 17:18:48

标签: java interface abstract-class

我正在用Java编写一个简单的Web浏览器。我有一个类WebBrowserPane,它扩展了JEditorPane并设置它以更好地显示网页(禁用编辑,添加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);
}
}

显然,这并不能确保抽象类方法被覆盖,所以我意识到它不是一个非常好的解决方案。有没有办法使用界面来完成这个?

2 个答案:

答案 0 :(得分: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();
}

答案 1 :(得分:1)

您可以使您的子类扩展JEditorPane,然后创建一个与您现在拥有的抽象类相同的接口,并让您的子类也实现该接口。