java - 该抽象类的接口(interface)等效项

标签 java interface abstract-class

我正在用 Java 编写一个简单的网络浏览器。我有一个类 WebBrowserPane,它扩展了 JEditorPane 并将其设置为更好地显示网页(禁用编辑、添加 HyperlinkListener 等)。然后我有一个类 WebBrowserFrame,它扩展了 JFrame 并在顶部放置了一些按钮和地址栏,在下面放置了一个 WebBrowserPane。不过,我希望它能够扩展 JEditorPane 并具有相关方法,而不是只能在下面放置一个 WebBrowserPane。

我编写了一个抽象类 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);
}
}

显然这并不能确保抽象类方法被重写,所以我意识到这不是一个很好的解决方案。有没有办法使用接口(interface)来完成此任务?

最佳答案

问题是接口(interface)无法扩展 JEditorPane。但是您可以在abstrac类中声明抽象方法,编译器将强制任何子类覆盖它们:

import javax.swing.JEditorPane;

public abstract class AbstractBrowser extends JEditorPane {
    public abstract void back();
    public abstract void forward();
    public abstract void refresh();
}

关于java - 该抽象类的接口(interface)等效项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13845140/

相关文章:

java - 使用 ObjectOutputStream 保存 HashMap

java - 为什么我的类不能实现在其中声明的接口(interface)?

syntax - 关键字 var 后的下划线和接口(interface)名称是什么意思?

java - 正确使用泛型类型避免不必要的转换(SuppressWarnings 未经检查的转换)

c++ - 复制构造函数 : deep copying an abstract class

java - 确保对某种类型的所有已声明和继承的成员调用方法

java - 我的 Java 小程序对其嵌入的图像的访问被拒绝

java - 在 Java 中实现计数信号量

java - 谷歌播放 java.lang.NullPointerException

wcf - 如何通过 WCF 传递 List<Interface>?