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.静态函数(依赖类,不依赖对象)

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

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

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

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

  • 相关阅读:
    二分练习题4 查找最接近的元素 题解
    二分练习题5 二分法求函数的零点 题解
    二分练习题3 查找小于x的最大元素 题解
    二分练习题2 查找大于等于x的最小元素 题解
    二分练习题1 查找元素 题解
    code forces 1176 D. Recover it!
    code forces 1173 B. Nauuo and Chess
    code forces 1173 C. Nauuo and Cards
    吴恩达深度学习课程笔记-15
    吴恩达深度学习课程笔记-14
  • 原文地址:https://www.cnblogs.com/xayah/p/8059618.html
Copyright © 2011-2022 走看看