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.   

    不冲突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="字符串";
      

  2.   

    本质上是多态.
    容器那部分这样的用法最多了.
    比如:
    List list;   //List 是接口,不能生成一个实例.
    list=new ArrayList();   //ArrayList是一个实现了接口List的类。Set set=new HashSet();  //和上面的类似,Set是接口。HashSet是实现了接口Set的类。
      

  3.   

    1.抽象类是不能实例化的  你可以看看API   找个中文版的   你再自己整个例子试试就明白了