zoukankan      html  css  js  c++  java
  • 多态

    1.向上转型

    【概念解释】将子类的对象赋值给父类的引用

    Pet pet = new Dog("旺财", "狗");

    * 不需要强制转换
    * 可以访问父类的方法,属性,如果子类重写了,那么调用子类
    * 无法访问子类特有的方法及属性(对子类方法或属性进行遮蔽)

    【原因解释】
    **一个引用能够调用哪些成员(变量和函数),取决于这个引用的类型**;所以子类向上转型之后,能调用哪些方法,取决于父类的类型;
    **一个引用调用的是哪一个方法,取决于这个引用所指向的对象**;所以如果调用的属性和方法在子类中也存在,那么调用的是子类的属性和方法;

    2.向下转型

    【概念解释】将父类的对象赋值给子类的引用(向下转型的前提是向上转型)

    //这是错误的
    Person p = new Person();
    Student s = (Student)p;
    //这是正确的
    Person p = new Student();//必须先向上转型
    Student s = (Student)p;

    * 需要强制转换
    * 如果把一个类型转换成其他类型,编译没有报错,执行报:java.lang.ClassCastException   --类转换异常
    * 如果把一个类型转换成其他类型,然后再由其他类型转换回本类型,编译执行都通过

    3.从属

    * instanceof  来判断该引用类型变量所“指向”的对象是否属于该类 

    if(pet instanceof Dog){
        //向下转型
        ((Dog) pet).bark();
    }

    4.接口的多态

    >Fly接口
    
    //向上转型   -- 类比 类的继承
    Fly fly = new Bird();
    //fly.fly();   //接口的多态表现形式
    //向下转型
    Bird bird = (Bird) fly;
    bird.fly();

    5.多态的体现

    * 封装是为了保护属性的一种操作,继承是为了扩展类的功能
    * 多态是由封装性和继承性引出的面向对象程序设计语言的另一特征。

    * 重载:根据传入的参数不同,完成的功能也不同
    * 重写:子类根据需求重写父类中的方法。

    ##静态多态性(编译时多态)
    由方法重载(overload)实现

    ##动态多态性(运行时多态)
    由方法重写(overridden)实现
    子类对象可以作为父类对象使用。在程序中凡是需要父类对象的地方,都可以用子类对象代替。

    调用规则:根据实例的类型决定调用的方法。

  • 相关阅读:
    拦截导弹类问题 (Codevs4888零件分组POJ1065Wooden Sticks)(LIS及其覆盖问题)
    BZOJ1034[ZJOI2008]泡泡堂
    BZOJ1015[JSOI2008]星球大战starwar题解报告
    合唱队形(DP)
    美元和马克(dp)
    链式前向星
    hdu-6170(模拟)
    51nod-1117 聪明的木匠(优先队列)
    51nod-1095 Anigram单词(简单map)
    KingXMagicSpells 期望dp (记忆化搜索)
  • 原文地址:https://www.cnblogs.com/anni-qianqian/p/5191261.html
Copyright © 2011-2022 走看看