有一个父类的对象,如果强制类型转换成子类对象,那么转换后的对象能不能调用子类的方法?
比如:
URL url=new URL("www.baidu.com");
HttpURLConnection baiUrl=(HttpURLConnection)url.openConnection();
注:openConnection返回一个URLConnection对象,HttpURLConnection是URLConnection类的子类并且是个抽象类。
这样强制类型转换后,能用baiUrl调用HttpURLConnection类的方法吗?为什么?
具体的调用过程是怎样的?

解决方案 »

  1.   

    不能调用子类的方法
    你可以自己写个代码 测试啊public class TestSup {
    public static void main(String[] args) {
    sub s = (sub) new par();
    s.age();
    }
    }
    class sub extends par{
    int age= 20;
    public void age(){
    System.out.println("my age is"+age);
    }

    }class par{
    int age;
    String name;

    public void callName(String name){
    System.out.println("my name is"+name);
    }
    }具体原因查看 下面两个帖子
    http://topic.csdn.net/t/20031201/15/2514406.htmlhttp://topic.csdn.net/t/20030824/16/2182732.html
      

  2.   

    楼主小心了,你在不知不觉中引入新的 Bug。
    URLConnection urlcnn = url.openConnection();
    HttpURLConnection baiUrl = null;
    if(urlcnn instanceof HttpURLConnection)
      baiUrl = (HttpURLConnection)urlcnn;
    if(baiUrl != null){
      // TODO 完成 baiUrl 的使命
    } else {
      // TODO 汇报 baiUrl 不能完成使命
    }
      

  3.   

    HttpURLConnection baiUrl=new HttpURLConnection();
    baiUrl.openConnection();子类可以像这样直接调用父类public类方法
      

  4.   


    java 转型问题其实并不复杂,只要记住一句话:父类引用指向子类对象。什么叫父类引用指向子类对象,且听我慢慢道来.从2个名词开始说起:向上转型(upcasting) 、向下转型(downcasting).举个例子:有2个类,Father是父类,Son类继承自Father。Father f1 = new Son();   // 这就叫 upcasting (向上转型)// 现在f1引用指向一个Son对象Son s1 = (Son)f1;   // 这就叫 downcasting (向下转型)// 现在f1还是指向Son对象第2个例子:Father f2 = new Father();Son s2 = (Son)f2;       // 出错,子类引用不能指向父类对象你或许会问,第1个例子中:Son s1 = (Son)f1;问什么 是正确的呢。很简单因为f1指向一个子类对象,Father f1 = new Son(); 子类s1引用当然可以指向子类对象了。而f2 被传给了一个Father对象,Father f2 = new Father();子类s1引用不能指向父类对象。总结:1。父类引用指向子类对象,而子类引用不能指向父类对象。2。把子类对象直接赋给父类引用叫upcasting向上转型,向上转型不用强制转换。      如:Father f1 = new Son();3。把指向子类对象的父类引用赋给子类引用叫向下转型(downcasting),要强制转换。   如:f1 就是一个指向子类对象的父类引用。把f1赋给子类引用s1即 Son s1 = (Son)f1;           其中f1前面的(Son)必须加上,进行强制转换。  参考:http://geyubin.javaeye.com/blog/391573
      

  5.   


    子类型到父类型不用强转 例如
    Object obj = new A();
    A可以是任何类。
    父类型到子类型需要强转
    Object obj = new Object();
    A a  = (A)obj;
    这就需要强转了,如果obj不是A类型就会抛出类型转换异常其实这样说也不太贴切,不过差不多意思