解决方案 »

  1.   

    这有什么奇怪的,真想知道具体类名字的话,debug或者print打印不就行了。
      

  2.   

    菜鸟,只知道写代码,运行。不知道怎么在eclipse中Debug啊
      

  3.   

    按照你所说的做了一下,看不懂。先不讨论那个。现就这个问题具体问一下:
    我重写了一下测试小例子,代码如下:
    public class URLDemo {

    public static void main(String[] args) throws Exception { URL url=new URL("http://www.baidu.com");

    System.out.println(url.openConnection().getClass());
    }}控制台打印为:class sun.net.www.protocol.http.HttpURLConnection
    查阅JDK文档没这个类啊?怎么回事?求教!
      

  4.   

    按照你所说的做了一下,看不懂。先不讨论那个。现就这个问题具体问一下:
    我重写了一下测试小例子,代码如下:
    public class URLDemo {

    public static void main(String[] args) throws Exception { URL url=new URL("http://www.baidu.com");

    System.out.println(url.openConnection().getClass());
    }}控制台打印为:class sun.net.www.protocol.http.HttpURLConnection
    查阅JDK文档没这个类啊?怎么回事?求教!
    这个是具体的实现类,不是规范里的,标准的JDK没列出来吧
      

  5.   

     
    public final class URL implements java.io.Serializable {   
         /**
         * The URLStreamHandler for this URL.
         */
        transient URLStreamHandler handler;
        public URLConnection openConnection() throws java.io.IOException {
    return handler.openConnection(this);
        }
      

  6.   

    URL#openConnection()方法返回的类型是根据你应用协议来决定的 sun默认提供了几种应用协议的实现(比如
    HttpConnection HttpsConnection JarURLConnection) 你也可以自己写一些应用协议的实现类
    至于你觉得说不通 我没有觉得哪里说不通 你要搞清楚继承的目的 父类并非一定是抽象类 子类重写父类也不代表子类的功能比父类更具体完善
      

  7.   

    我们这里肯定没有实现自己的协议,只是应用Http协议,URL的opnConnection方法返回类型,根据JDK文档是URLConnection这个协议无关的类型,因为我们应用的是Http协议,所以返回的是HttpURLConnection类型,李刚也将之强转成了HttpURLConnection类型。问题是HttpURLConnection的disconnect方法是个抽象方法啊,你还是没能给我讲到要害处啊,求继续指导
      

  8.   

    我们这里肯定没有实现自己的协议,只是应用Http协议,URL的opnConnection方法返回类型,根据JDK文档是URLConnection这个协议无关的类型,因为我们应用的是Http协议,所以返回的是HttpURLConnection类型,李刚也将之强转成了HttpURLConnection类型。问题是HttpURLConnection的disconnect方法是个抽象方法啊,你还是没能给我讲到要害处啊,求继续指导
    我都说了这个是sun提供的实现 包括你自己写的应用协议的URLConnection 一般在sun.net.www.protocol下 你连获取的实现类是哪个都搞不清楚 还说什么要害
      

  9.   

    我们这里肯定没有实现自己的协议,只是应用Http协议,URL的opnConnection方法返回类型,根据JDK文档是URLConnection这个协议无关的类型,因为我们应用的是Http协议,所以返回的是HttpURLConnection类型,李刚也将之强转成了HttpURLConnection类型。问题是HttpURLConnection的disconnect方法是个抽象方法啊,你还是没能给我讲到要害处啊,求继续指导
    我都说了这个是sun提供的实现 包括你自己写的应用协议的URLConnection 一般在sun.net.www.protocol下 你连获取的实现类是哪个都搞不清楚 还说什么要害
    我不会才问。我要是逻辑那么清楚,弄通透了就不会来提问了。返回的不是HttpURLConnection类型吗?但是这个类的disconnect方法根据JDK文档是个抽象方法啊,怎么能直接调用呢。恳求保持耐心,帮我答疑解惑!跪谢。。
      

  10.   

    返回怎么不是HttpURLConnection
    是sun.net.www.protocol.http.HttpURLConnection!
      

  11.   

    然后sun.net.www.protocol.http.HttpURLConnection是java.net.HttpURLConnection抽象类的子类,它实现了java.net.HttpURLConnection里的抽象方法disconnect方法,是这样的吧?
      

  12.   

    然后sun.net.www.protocol.http.HttpURLConnection是java.net.HttpURLConnection抽象类的子类,它实现了java.net.HttpURLConnection里的抽象方法disconnect方法,是这样的吧?
    ............
      

  13.   

    楼主,你可以这样写代码测试:
    public class URLDemo { public static void main(String[] args) throws IOException { URL url=new URL("http://www.baidu.com");

    Class<?> clazz=url.openConnection().getClass();

    System.out.println(clazz);

    Class<?> superClazz=clazz.getSuperclass();

    System.out.println(superClazz);
    }}控制台输出:class sun.net.www.protocol.http.HttpURLConnection
    class java.net.HttpURLConnection这样就很明白了。url.openConnection()方法返回的确实是HttpURLConnection类型,但是不是JDK里的java.net.HttpURLConnection,而是sun.net.www.protocol.http.HttpURLConnection,在通过反射拿到这个类的父类,发现它的父类就是java.net.HttpURLConnection,所以它实现了父类的抽象方法disconnect()方法,所以可以直接调用。