Posted on 2007-09-29 11:23
古典哈尼 閱讀(448)
評論(2) 編輯 收藏 所屬分類:
好文章
奇怪 好奇怪 好好奇怪 特別奇怪啊
前幾天剛把JAVA的基本語法看完,今天看到了SERVLET 痛苦 傷心 難過啊 JAVA的知識真的紛繁而多雜
今天遇見一個問題 關于借口的產生對象
protected void service(HttpServletRequest req,
HttpServletResponse resp) throws ServletException,
java.io.IOException
我們需要寫的一個函數,可奇怪的是在查看文檔時發現HttpServletRequest HttpServletResponse 全是接口,借口怎么能產生對象呢?很奇怪的事情,在BAIDU搜也沒有什么具體的內容有的說是默認產生對子類對象的引用在群里問也無果
后來看到文檔上說:Receives standard HTTP requests from the public service
method and dispatches them to the do
XXX methods defined in this class. This method is an HTTP-specific version of the Servlet.service(javax.servlet.ServletRequest, javax.servlet.ServletResponse)
method. There's no need to override this method.
又有個高手告訴我是容器做的工作
后來又看到一句代碼
Enumeration e=getInitParameterNames();其中Enumeration也是一個接口INTERFACE 于是更加奇怪了,如果說上邊的是容器默認做出的一些事情,那這個簡直就是赤裸裸的踐踏JAVA編程規則嘛@ 于是不停的查看幾個相關類的文檔,.無果
后來突然想到 孫鑫在JAVA無難事里說的把子類對象賦給父類的例子,于是思考 把焦點放在賦值的等號的右邊,右邊是一個可以返回一個實現左邊借口類型的對象,于是編寫了一個簡單的測試代碼
abstract interface aaa
{
public abstract void paint();
}
public class test implements aaa
{
public void paint()
{
System.out.println("object test is execute!!");
}
public test getInterface()//返回一個TEST對象,即一個實現了AA接口的對象
{ test aa=new test();
return aa;
}
public static void main(String[] args)
{ test b=new test();
aaa e=b.getInterface();
e.paint();
}
}
運行結果是:OBJECT TEST IS EXECUTE!
可以看出實際上定義的是一個TEST的對象,因為調用的是實現類的PAINT函數,而把得到的一個TEST對象的引用傳給E 實際上產生了一個TEST對象,已經被默認的轉換了
菜鳥我,也不知道對不對 有老大給些建議和意見啊 崩潰啊
順便問下有沒有SERVLET的一個好的視頻啊
THANKS
ps:剛剛看到這么一句話,有些借口的實現類是由SERVLET引擎提供的,估計用上邊的原理沒法解釋的都能用這句話來糊弄過去