/*类1 这里继承了HttpURLConnection*/
abstract public class HttpUrlConnectionBase extends HttpURLConnection {    protected HttpUrlConnectionBase(URL u) {
      super(u);
   }
  .........
}类2 public class HTTP {
  public HTTP(URL url){
    HttpUrlConnectionBase httpUrlConnectionBase   = (HttpUrlConnectionBase)url.openConnection(); //这里出错
   ...............
  }
..........................}错误Exception in thread "main" java.lang.ClassCastException: sun.net.www.protocol.http.HttpURLConnection
请问,怎么解决,谢谢

解决方案 »

  1.   

    有HttpUrlConnectionBase 这个类么
      

  2.   

    父类的不能转换成子类的类型的,不然会报ClassCastException
      

  3.   

    谁说父类不能转换成子类的
    HttpUrlConnection httpUrlConnection   = (HttpUrlConnection)url.openConnection这样都不会出错
      

  4.   

    他的意思是说,真实的super class的实例是无法强制转换成其sub class的类型的。你上面的例子,返回值确实是一个HttpUrlConnection的对象,只不过返回值类型是其super class的类型罢了。所以可以转换。就好像,残疾人类是人类的一个sub class,那么一个不是残疾人对象的人无法强制转换成残疾人的。你如果非要强制致残,就是非法行为了。在计算机中,非法行为会出错的。
      

  5.   

    没办解决, 因为你的转换根本就是错误的. 你怎么知道url.openConnection()返回的是一个HttpUrlConnectionBase对象? 如果不是当然会出异常.父类是否能转换成子类取决于这个父类的引用所指向的对象是不是真的是子类的对象. 如果是可以强制类型转换, 如果不是则报异常.
      

  6.   

    url.openConnection()返回的是URLConnection 未必是HttpURLConnection(后者是前者的子类),确实存在这个错误的可能;把范围扩大不会出错
    把范围缩小,则应该确保被缩小的对象是正确的对象