• 对象的转型


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

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

    比如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)

  • 相关阅读:
    【译】可扩展前端2  —  常见模式
    【译】可扩展前端1  —  架构基础
    【译】The Clean Architecture
    获取页面元素位置
    vue高价组件的使用
    gif动态图片转精灵图
    消除 transition 闪屏
    移动端 -- 如何去掉元素被触摸时产生的半透明灰色遮罩?
    解决手机移动端触屏版web页面长时间按住页面出现闪退的问题
    移动端滑动慢,卡顿
  • 原文地址:https://www.cnblogs.com/larrylawrence/p/3397452.html
Copyright © 2020-2023  润新知