java的向上转型是怎么回事,请教一下,类向上转型是不是就丢掉了一些自己的方法啊!

解决方案 »

  1.   

    通俗理解向上转型:就是子类转型成父类。class A 


    class B extends A 


    A b = new B();
    这个就是向上转型。转型后b只能调用类A中存在的方法
      

  2.   

    A a = new B(); B extends A 
    对于这个例子。声明的时候,a的类型为A。但是a所指向的实例为A的子类,即B。 
    也就是说,虽然a是B的实例,但是仍然是A类型,方法自然都是A类型的方法。 
    当程序运行到a.getString()的时候,虚拟机会去寻找对象可用的名为getString()的方法。 
    此时如果B类型已经覆盖了父类的该方法,虚拟机首先捕捉到该方法并执行。 
    如果B中找不到。则会继续向上寻找父类的名为getString()的方法。
    class A {    public String getString() {        return "A";
        }
    }class B extends A {    public String getString() {        return "New A";
        }
    }public class ZhuanXing {    public static void main(String[] args) {        A a = new B();        String str = a.getString();        System.out.println(str);
        }
    }
    结果:New A
    class A {    public String getString() {        return "A";
        }
    }class B extends A {    public String getNewString() {        return "B";
        }
    }public class ZhuanXing {    public static void main(String[] args) {        A a = new B();        String str = a.getString();        System.out.println(str);
        }
    }结果:A
      

  3.   

    a只能引用继承自父类的成员和被覆盖的成员,而不能引用在子类中定义的成员。
    class A{
    public String getString(){
    return "A";
    }
    }
    class B extends A{
    public String getString(){
    return "B";
    }
    }
    public class ZhuanXin{
    public static void main(String[] args){ 
    A a=new B(); 
    String str=a.getString();
    System.out.println(str);
    }
    }结果:B
      

  4.   

    顶下5楼,然后补充一点!借用5楼的!
    class A {   public String str="str_A";//补充的!
        
       public String getString() {        return "A";
        }
    }class B extends A {
        
        public String str="str_B";//补充的!    public String getString() {        return "New A";
        }
    }public class ZhuanXing {    public static void main(String[] args) {        A a = new B();        String str = a.getString();        System.out.println(str);
            System.out.println(a.str);//补充的    }
    }输出:
       New A
       str_A