URLConnection如何对应具体实现子类

import java.net.URL;
import java.net.URLConnection;

public class Test {
	public static void main(String[] args) {
		try {
			URL url = new URL("http://www.google.com.cn");
			URLConnection con = url.openConnection();
			con.setDoOutput(true);
			con.setDoInput(true);
			con.setReadTimeout(0);
			con.setConnectTimeout(0);
			con.connect();
			System.out.println("HeaderField:" + con.getHeaderField("content-type"));
		} catch (Exception e) {
			System.out.println("Exection:" + e.getMessage());
		}
	}
}

 URLConnection 是根据各种协议交给不同的协议处理实现子类去处理的,这是典型的多态。 (火龙果@bao110908)

http:// 的 HTTP 协议交给 java.net.HttpURLConnection 的子类 sun.net.www.protocol.http.HttpURLConnection 处理
ftp:// 的 FTP 协议交给 URLConnection 的子类 sun.net.www.protocol.ftp.FtpURLConnection 处理
file:// 的 FILE 协议交给 URLConnection 的子类 sun.net.www.protocol.file.FileURLConnection 处理
https:// 的 HTTPS 协议交给 javax.net.ssl.HttpsURLConnection 的子类 sun.net.www.protocol.https.HttpsURLConnectionImpl 处理
jar:// 的交给 java.net.JarURLConnection 子类 sun.net.www.protocol.jar.JarURLConnection 处理
mailto:// 的交给 URLConnection 的子类 sun.net.www.protocol.mailto.MailToURLConnection 处理

 

 

比如HttpURLConnection的话,是在URL类的static URLStreamHandler getURLStreamHandler(String protocol)方法中确认其具体实现子类的某类型URLStreamHandler(通过反射) 再通过其openConnection方法获得

 

尝试总结: 多态如何定位到实现子类,通过参数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值