zoukankan      html  css  js  c++  java
  • 【知了堂学习笔记】多态基本知识

    多态

    一个对象具备多种形态。例如:猫类事物具备车的形态,又有动物的形态,这就是对象的多态性。

    多态在代码中的体现:(父类或者接口的引用指向其子类的对象。)

    动物 x = new (); // 一个对象,两个形态

    多态的好处

    提高了代码的扩展性,前期定义的代码可以使用后期内容。

    多态的弊端:

    前期定义的内容不能使用(调用)后期子类特有的内容。

    多态的前提:

    1. 必须有关系,继承,实现。
    2. 要有覆盖。

    Animal a = new Cat();//自动类型提升,猫对象提升了动物类型。但是猫特有功能无法访问,

    //作用就是限制对特有功能的访问,提升扩展性。

    //专业讲:向上转型。将子类型隐藏,就不用使用子类的特有方法

    a.eat();//如果还想用具体猫的特有功能。还可以将该对象进行向下转型。

    Cat c = (Cat)a;//向下转型的目的是为了使用子类中的特有方法

    c.eat();

    c.catchMouse();

    注意:对于转型,自始自终都是子类对象在做类型的变化。

     对象类型判断     

    If(a instanceof Cat)

    // instanceof:用于判断对象的具体类型,只能用于引用数据类型判断

    通常在向下转型前用于健壮性的判断。

    多态的特点

    多态时成员的特点:

    1. 成员变量(覆盖只发生在函数上)

     编译时:参考引用型变量所属的类中是否有调用的成员变量。有则编译通过,没有则编译失败。

     运行时:参考引用型变量所属的类中是否有调用的成员变量。并运行该所属类中的成员变量。

    总结:编译和运行都参考等号左边。

    1. 成员函数(非静态--> 依赖对象)

     编译时:参考引用型变量所属的类中是否有调用的函数,有则编译通过

    没有就编译失败。

     运行时:参考的是对象所属的类中是否有调用的函数。

    总结:编译看左边,运行看右边。

    Eg:

    Class Outer{

    Void method(){

    Object obj = new Object(){ //父类对象由子类初始化完成,非静态函数在编译时,如果父类没有函数,则编译失败,如果父类有相应函数,则运行时在子类中寻找对应的函数

    Public void show(){

    Syso(show run);

    }

    };

    Obj.show();

    }

    }

    Class InnerClassDemo{

    主函数(){

    new Outer().method();

    }

    }

    //编译失败。

      3.静态函数(依赖类,不依赖对象)

       编译时:参考引用型变量所属的类中是否有调用的静态方法。

      运行时:参考引用型变量所属的类中是否有调用的静态方法。

    简单说:编译和运行都看左边。    

    其实对于静态方法,是不需要对象的,直接用类名调用即可。      

  • 相关阅读:
    PHP04
    PHP03
    PHP02
    PHP01
    jquery attr()方法获取input的checked属性问题
    vue案例
    js基础(数组)
    js基础
    POJ1659 可图性判定
    ZOJ3329 概率DP
  • 原文地址:https://www.cnblogs.com/xayah/p/8059618.html
Copyright © 2011-2022 走看看