2014-02-10 45 views
1

我關於Java層次模型的一些事實有點擔憂。HttpServlet的層次解釋

如Java教程說:

一個抽象類,可能無法實現方法(但他們),如果你 從抽象類擴展您必須實現的 超類的所有方法,否則新的類必須也是抽象的

但現在,我正在學習servlets類,發現即使我沒有實現所有在HttpServlet中聲明的方法,我的servlet也會運行,發生了什麼?我看到在源代碼中它們是受保護的方法(dopost,doget等),甚至它說編譯的代碼),但即使它們受保護,我們如何擴展創建新Servlet的方法,是因爲公共抽象HTTPservlet簽名? 。

我也發現了這個非常不尋常的,有什麼意思?當你在公共抽象類GenericServlet類,它實現的servlet,ServletConfig類,序列化

private static final 
    String METHOD_DELETE = "DELETE"; 
    private static final 
String METHOD_HEAD = "HEAD"; 
private static final 
String METHOD_GET = "GET"; 

理論的所有其他部分都OK。這個想法是在未來有一個類,它不一定需要實現像httpservlet這樣的所有接口方法。

比你了,我還希望Java類的造型更清晰或更深的資源。

When an abstract class is subclassed,該子類通常爲其父類中的所有抽象方法提供實現。但是,如果沒有,那麼子類也必須聲明爲抽象。

是的我誤解了,誤讀了httservlet規則只適用於抽象方法沒有身體只是簽名,但httpsevlet方法不是抽象的,他們有實現,但編譯=)非常感謝你我明白爲什麼現在我們不需要實現這些方法和httpservlet使用的接口。

+1

你應該閱讀「不得」爲「可能不」。 – EJP

回答

1

一個抽象類,可能無法實現方法(但他們),如果你從一個擴展>抽象類必須實現超類的所有方法,否則新的類必須>抽象以及

我認爲你誤解了。

一個抽象類實現方法,你只是沒有,直到你的抽象類擴展成一個具體的類獲得使用這些方法。通常這是因爲抽象類中的方法將在各種擴展類中重用。其中一些原因是消除重複,並隱藏了鍋爐板代碼。

在HttpServlet中你得到你所描述的方法的默認實現。當您想擴展HttpServlet的行爲以適應您的特定需求時,您覆蓋您選擇的那些。