• 对象的转型


    转型是面向对象多态性的一个体现。

    向上转型:将子类的对象赋值给父类的引用(引用可以理解为对象)。

    比如Student继承Person,那么这样表示:

    Student s = new Student();
    Person p = s ; 

    以上两步等价于下面的一步:

    Person p = new Student();


    1.一个引用能调用哪些成员(变量和函数),取决于这个引用的类型。这就是说,p只能调用Person类中定义的成员,不能调用s中独有的成员。

    2.而一个引用调用的是哪一个方法,取决于这个引用指向的对象。就上面的例子说,如果Student和Person类中都有introduce()方法(Students中覆写了Person中的introduce()方法),那p.introduce();就指向s中的introduce()方法。

    向下转型:将父类的对象赋值给子类的引用。

    Student s1 = new Student();
    Person p = s1 ; 
    Student s2 = (Student)p ; 

    可以看出,向下转型要先向上转型,再强制向下转型。

    同样,上面三句可以等效成下面两句:

    Person p = new Student();
    Student s = (Student)p;

    下面的例子是错误的向下转型:

    Person p = new Person();//向下转型没有先向上转型
    Student s = (Student)p;

     --------------------------Oct.31

    为什么要对象转型呢?思考了一下,可能有下面的原因:

    对于向上转型,回顾上面的第一点:“一个引用能调用哪些成员(变量和函数),取决于这个引用的类型。”子类对象如果想要调用父类对象的成员,就可以向上转型。

    对于向下转型,回顾上面的第二点:“一个引用调用的是哪一个方法,取决于这个引用指向的对象。”父类对象强制转成子类对象,就可以调用子类对象的方法。

    以后在应用中慢慢体会。

    (end)

  • 相关阅读:
    oracle“记录被另一个用户锁住”
    Oracle CASE WHEN 用法介绍
    拥有机器人的人生会是怎样的体验?
    需求那么多,核心需求都从哪里来?
    一文读懂互联网及电商逻辑
    读书:《敏捷产品--不确定性的思维革命》
    读书:《超越感觉:批判性思考指南》一
    618啦,你的钱包又被盯上啦!
    产品经理如何开启上帝视角?
    我的产品经理价值观
  • 原文地址:https://www.cnblogs.com/larrylawrence/p/3397452.html
Copyright © 2020-2023  润新知