日期:2014-05-20  浏览次数:20855 次

对于抽象类的一点疑问
1.在李刚著的《疯狂java讲义》第二版中,第6章抽象类的那一节,对于抽象类,有这样一句话:抽象类不能用来创建实例,只能当成父类来被继承。
2.java API7.0中,HttpURLConnection是个抽象类。
Class HttpURLConnection
 
java.lang.Object
 java.net.URLConnection
 java.net.HttpURLConnection
 


Direct Known Subclasses: HttpsURLConnection 
--------------------------------------------

public abstract class [color=#FF0000]HttpURLConnection[/color]
extends URLConnection
3. URL resource=new URL("http://www.crazyit.org/index.php");
URLConnection wResp=resource.openConnection();中wResp是HttpURLConnection
通过反射机制可以看到: System.out.println(wResp.getClass().getName());
输出结果如下:sun.net.www.protocol.http.HttpURLConnection
所以可以知道,在运行的过程中,wRsp是HttpURLConnection的实例。
4.疑问:根据上面三点,现象是:第一点上描述的内容和第三点实验内容不符。
这到底是怎么回事?是我的实验方法不对呢?还是对某方面知识的理解不到位?

------解决方案--------------------
不冲突

1.sun.net.www.protocol.http.HttpURLConnection 继承了 java.net.HttpURLConnection
2.url.openConnection()实际上返回的是一个sun.net.www.protocol.http.HttpURLConnection的实例
3.因为继承的关系,子类的引用可以被赋值给一个声明为其父类的一个变量.

关于第三点,java里任意一个类,都是继承自Object.你可以把其它类的引用赋值给Object变量。
比如 Object obj="字符串";