Posted on 2007-09-29 11:23
古典哈尼 阅读(428)
评论(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引擎提供的,估计用上边的原理没法解释的都能用这句话来糊弄过去