簡體   English   中英

在Java中創建抽象類URLConnection或HttpURLConnection的對象

[英]Creating an object of abstract class URLConnection or HttpURLConnection in Java

我在教程中看到了以下代碼:

URLConnection connection = new URL("http://example.com").openConnection();

怎么可能? API說URLConnection(以及Subclass HttpURLConnection)是一個抽象類。 但是抽象類無法實例化。 我還看到了其他教程(例如)這段代碼:

URL url = new URL( "http://java-tutor.com/index.html" );
URLConnection con = url.openConnection();

為什么沒有'新'? 對我來說這很奇怪,所以有人可以向我解釋。

openConnection();

創建URLConnection類的實現實例(sun.net.www.protocol.http.HttpURLConnection @Credit轉到Sotirios)。

基於javadoc

如果對於URL的協議(例如HTTP或JAR),存在屬於以下包之一或其子包之一的公共專用URLConnection子類:java.lang,java.io,java.util,java.net,返回的連接將是該子類。 例如, 對於HTTP,將返回HttpURLConnection ,對於JAR,將返回JarURLConnection。

首先,您不要實例化URLConnection而是在以下位置實現URL

URLConnection connection = new URL("http://example.com").openConnection();

URLConnection是變量類型(可以是abstract 甚至是 interface ), URL是您實例化的特定類。

關於no new word, openConnection()返回URLConnection對象,因此您不需要自己創建一個。

URL是一個工廠,它通過一個方案創建一個基於URLConnection (如果內存正確地為我提供服務)。 你可以有HttpsURLConnectionHttpURLConnection

URLConnection確實是一個抽象類。 它無法實例化。

但是,為了避免無用,對於類結構中的每個抽象類,必須有一個具體的子類(可能刪除了幾個級別),即可以實例化。

URL.openConnection()正在向您返回其中一個子類。 如果您願意,可以使用調試器驗證這一點。 URLConnection是您調用“con”的引用類型,而不是該引用引用的對象的類型。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM