2012-12-12 26 views
2

我正在用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); 
} 
} 

顯然這並不能確保抽象類的方法是永遠的重寫,所以我意識到它不是一個很好的解決方案。有沒有辦法使用界面來完成此操作?

回答

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(); 
} 
+0

正是我在找的。乾杯! – Michael

1

你可以讓你的子類擴展JEditorPane中,然後創建一個接口相同,你有抽象類現在讓你的子類實現這個接口。