我在教程中看到了以下代码:
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();
为什么没有'新'?对我来说这很奇怪,有人可以向我解释一下。
答案 0 :(得分:4)
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。
答案 1 :(得分:1)
首先,您不要在URLConnection
实例化URL
,而是URLConnection connection = new URL("http://example.com").openConnection();
:
URLConnection
abstract
是变量类型(可以是interface
或甚至是 URL
),openConnection()
是您实例化的特定类。
关于没有新词,URLConnection
会返回{{1}}个对象,因此您无需自行创建。
答案 2 :(得分:1)
URL
是一个工厂,它通过一个方案创建一个URLConnection
(如果内存正确地为我服务)。您可以HttpsURLConnection
或HttpURLConnection
。
答案 3 :(得分:1)
URLConnection确实是一个抽象类。它无法实例化。
但是,为了不使用,对于类结构中的每个抽象类,必须有一个子类(可能删除了几个级别),这是具体的,即可以实例化。
URL.openConnection()正在向您返回其中一个子类。如果您愿意,可以使用调试器验证这一点。 URLConnection是您称为“con”的引用的类型,而不是该引用引用的对象的类型。