对象的上转型对象

假设,BA的子类或间接子类,当我们用子类B创建一个对象,并把这个对象的引用放到类A声明的对象中时,如

   A a;

   B b=new B();

   a=b;

那么,就称对象a是子类对象b的上转型对象.


上转型对象不能操作子类声明定义的成员变量(失掉了这部分属性),不能使用子类声明定义的方法(失掉了一些功能)。

◆上转型对象可以代替子类对象去调用子类重写的实例方法。如果子类重写的方法是实例方法,那么上转型对象调用重写的方法时,就是通知对应的子类对象去调用这些方法。因此,如果子类重写了父类的某个实例方法后,子类对象的上转型对象调用这个方法时,一定是调用了这个重写的方法。

◆上转型对象可以调用子类继承的成员变量和隐藏的成员变量。

      可以将对象的上转型对象再强制转换到一个子类对象,这时该子类对象又具备了子类的所有属性和功能。例子中,使用了上转型对象,效果 如图

class A{

    double n;

    int m;

    void f(){

        System.out.printf("子类继承方法f(),n=%f,m=%d\n",n,m); 

    }

    void g(){

        System.out.printf("你好,n=%f,m=%d\n",n,m);  

    }  

}

class B extends A{

    int n=12;

    void g(){

        System.out.printf("子类重写方法g(),n=%d,m=%d\n",n,m); 

    }

    void cry(){

        System.out.printf("子类新增的方法,n=%d,m=%d\n",n,m); 

    }

}

public class Example5_8{

    public static void main(String args[ ]){

        A a;

        a=new B();             //a是子类对象的上转型对象

        a.n=0.618;             //操作子类隐藏的double类型成员n

        a.m=200;              //操作子类继承的成员m,等价于b.m=200;

        a.f();                 //调用子类继承的方法,等价于b.f();

        a.g();                  //调用子类重写的方法,等价于b.g();

        B b=(B)a;             //上转型对象强制转换成子类对象

        b.n=555;                 //操作子类新增的int类型成员n

        b.cry();                // a.cry();  是非法的   //上转型对象失去了新增的变量和方法

    }

}

 

 

 

 

  • 14
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值