• 多态


    多态的概念:

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

          普通类定义的格式:

                  父类    变量名=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();
                }

  • 相关阅读:
    C#引用类型详细剖析(转)
    wcf问题集锦
    Emgu CV 初试
    C#语言使用习惯
    多线程和消息机制
    ArrayAdapter
    SimpleAdapter
    删除对话框
    HTML制作个人简历
    冒泡排序
  • 原文地址:https://www.cnblogs.com/maxuefeng/p/13736704.html
Copyright © 2020-2023  润新知