zoukankan      html  css  js  c++  java
  • 多态

    多态的概念:

          多态指的一个事物具有多种形态,最终多态体现为父类变量指向子类对象。多态的前提是,须有子父类关系,类实现接口关系。

          普通类定义的格式:

                  父类    变量名=new   子类();

          抽象类多态定义的格式:

                  抽象类  变量名=new 抽象类子类();

          接口多态定义的格式:

                  接口    变量名=new 接口实现类();

    多态变量调用成员变量时的特点:
                编译时期,如果访问的变量时父类的成员变量,如果不是,编译失败。
                运行时期:如果访问子父类相同变量名的变量,则值为父类的。
                编译运行都看左边。

    多态调用调用成员方法时的特点
                编译时期,如果调用的是父类有的方法,编译成功,父类没有,编译失败。
                运行时期,如果调用的是子父类都有的方法,则调用子类的方法,如果是父类独有的,调用父类的
                编译看左边,运行看右边。

    多态的转型:

        向上转型:子类对象赋值给一个父类引用时,便是向上转型,即多态本身就是向上转型。

        格式:

          父类类型    对象=new  子类类型();

        向下转型:已经向上转型的子类对象使用强制类型转换的格式,将父类引用转为子类引用,便是向下转型。也就是说前提条件是有向上转型。

        格式:

          子类类型   变量名=(子类类型)  父类类型的变量

    instanceof关键字:

          因为父类有多个子类,不确定要转化哪个子类,所以要用instanceof判断某个对象是否属于某种数据类型。


          if(p instanceof Teacher){
          Teacher t=(Teacher)p;
              }

    多态的好处与弊端:

          当父类的引用指向子类对象时,就发生了向上转型,即把子类类型对象转成了父类类型对象,所以说隐藏了子类类型,提高了代码的扩展性。

          但是向上转型只能使用子父类共有的功能,即重写的方法,无法使用子类特有的功能。

          当不要面对子类类型时,通过提高拓展性,或者使用父类的功能就能完成相应的操作,这时就使用向上转型。

          当使用子类特有的功能时,就使用向下转型。但是当需要面对具体的子类对象时,向下转型容易发生ClassCastException类型转换异常,所以需要用instanceof判断。

            Animal a = new Dog();
              if (a instanceof Dog) {
                 Dog b = (Dog) a;
                 b.eat();
                  b.lookhome();
                }

  • 相关阅读:
    PNG文件格式具体解释
    opencv2对读书笔记——使用均值漂移算法查找物体
    Jackson的Json转换
    Java实现 蓝桥杯VIP 算法训练 装箱问题
    Java实现 蓝桥杯VIP 算法训练 装箱问题
    Java实现 蓝桥杯VIP 算法训练 单词接龙
    Java实现 蓝桥杯VIP 算法训练 单词接龙
    Java实现 蓝桥杯VIP 算法训练 方格取数
    Java实现 蓝桥杯VIP 算法训练 方格取数
    Java实现 蓝桥杯VIP 算法训练 单词接龙
  • 原文地址:https://www.cnblogs.com/maxuefeng/p/13736704.html
Copyright © 2011-2022 走看看