2013-04-06 42 views
0

請考慮下面的代碼片段:在Servlet中創建一個接口的對象?

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包的核心接口。

此外,「request」和「response」被認爲是上述程序描述中的對象。

任何人都可以告訴/解釋我怎麼可以這些接口有自己的對象考慮到接口不能有對象的事實?

如果我在某個地方錯了,請糾正我。

+0

你的問題有點令人困惑,但我認爲*你缺少的是你可以通過它的接口引用一個對象。例如,如果你有一個接口動物和一個類的狗,你可以聲明Animal myAnimal = new Dog()。 – mconlin 2013-04-06 23:00:01

+0

檢查這[問題](http://stackoverflow.com/questions/3355408/explaining-interfaces-to-students)瞭解更多關於接口 – A4L 2013-04-06 23:00:18

回答

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都實現了相應的接口。你當然可以傳遞這些對象中的任何一個。

1

對象實現接口。所以在ServletRequest的情況下,有可能實現它的目標,這樣的事情:

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

當你在你的service()方法ServletRequest,你真的得到實現該接口的具體對象。

我懷疑你的困惑是圍繞接口本身沒有實現細節的事實。接口只是爲了實現其他對象提供了一個規範。

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