0

请考虑以下代码片段:

import java.io.*;
import java.util.*;
import javax.servlet.*;

public class PostParametersServlet extends GenericServlet{
    public void service(ServletRequest request , ServletResponse response) throws 
         ServletException,  IOException { .... 

等等等等.....

我的问题:

据说我们不能创建接口的对象,但如果我们考虑上面的代码片段,ServletRequest 和 ServletResponse 是 javax.servlet 包的核心接口。

此外,在上述程序描述中,“请求”和“响应”被称为对象。

考虑到接口不能有对象这一事实,谁能告诉/解释我这些接口如何拥有自己的对象?

如果我在某个地方错了,请纠正我。

4

3 回答 3

1

对象实现接口。因此,在 的情况下ServletRequest,有一个实现它的对象,如下所示:

public class ServletRequestImpl implements ServletRequest {
    // All of the methods defined in ServletRequest implemented here.
}

当你ServletRequest在你的service()方法中得到这个时,你真的得到了一个实现该接口的具体对象。

我怀疑你的困惑在于接口本身没有实现细节。接口只是为其他对象提供一个规范来实现。

于 2013-04-06T22:59:59.040 回答
0
Could anyone tell/explain me how can these interfaces have object of their own considering the fact that interfaces cannot have objects?

这是不正确的。

接口类型的引用可以引用实现该接口的任何对象。

您会注意到 HttpServletRequest 和 HttpServletResponse 都实现了各自的接口。你当然可以在这里传递这些对象中的任何一个。

于 2013-04-06T22:59:26.870 回答
0

考虑以下类型:

public interface A {
public void m();
}
public class B implements A {
public void m() {
    // TODO Auto-generated method stub  
}
}

现在您可以拥有任何代码行:

public static void main(String[] args) {
A a = new B();
anyMethod(a);
}

public static void anyMethod(A a) {
System.out.println(a.getClass());
}

在anyMethod中,参数类型是接口A,实际类型是B,会用sysout显示

于 2013-04-06T23:06:22.873 回答