【问题标题】:Creating an object of an interface in Servlet?在 Servlet 中创建接口的对象?
【发布时间】:2013-04-06 22:56:29
【问题描述】:

请考虑以下代码sn-p:

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

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

等等等等……

我的问题:

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

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

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

如果我在某处错了,请纠正我。

【问题讨论】:

  • 您的问题有点令人困惑,但我认为您缺少的是可以通过其接口引用对象。例如,如果你有一个接口 Animal 和一个类 Dog,你可以声明 Animal myAnimal = new Dog()。
  • 查看question 了解更多关于接口的信息

标签: java servlets


【解决方案1】:

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

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

当您在service() 方法中获得ServletRequest 时,您实际上获得了一个实现该接口的具体对象。

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

【讨论】:

    【解决方案2】:
    Could anyone tell/explain me how can these interfaces have object of their own considering the fact that interfaces cannot have objects?
    

    这是不正确的。

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

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

    【讨论】:

      【解决方案3】:

      考虑以下类型:

      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显示

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-09-04
        • 2011-01-12
        • 2011-10-28
        • 2013-02-06
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多