• 面向对象3---多态


    第一章、多态

    一、概述     

     1、概念

    是面向对象的三大特性之一

    多态的代码体现在一个子类对象(实现类对象)既可以给这个子类(实现类对象)引用变量赋值,又可以给这个子类(实现类对象)的父类(接口)变量赋值。

    2、意义:

    2.1)-------行为的多态:(一个引用向下造型多个对象)

    同一个行为:同一类型的引用,指向不同的(子类或者子类接口)对象时,相同的行为会有不同的实现

    2.2) -------对象的多态: (一个对象向上造型多个引用)

    同一个对象:被向上造型为不同的类型时,同一个对象有不同的功能

    3、定义格式

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

    变量名.方法名();

    4、成员的特点(向上和向下转型都是这样)

    l  多态成员变量

    当子父类中出现同名的成员变量时,多态调用该变量时:

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

    运行时期:也是调用引用型变量所属的类中的成员变量。

    简单记:编译和运行都参考等号的左边。编译运行看左边。

    l  多态成员方法

    编译时期:参考引用变量所属的类,如果没有类中没有调用的方法,编译失败。

    运行时期:参考引用变量所指的对象所属的类,并运行对象所属类中的成员方法。如果对象没有成员方法,则看引用的成员方法;

    简而言之:编译看左边,运行看右边。如果右边没有方法,则看左边;

    5、多态-转型

    5.1向下转型(强制类型转换:父类引用--赋值--子类引用)

    5.1.1成功的条件只有如下两种:

    (1)定义父类引用:

    必须是满足父 fu = new 子();

    如果是直接创建父类对象,是无法向下转型的!

    (2)转换父类的引用

    父类引用转换的值,就是该类型

    父类引用转换的值,该类实现的接口

    5.1.2注意实现

    (1)强转若不符合如上两个条件,则发生ClassCastException类型转换异常

              建议:在强转之前先使用instanceof来判断引用指向的对象是否是该类型

      5.1.3使用格式:

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

    如:Student stu = (Student) p;  //变量p 实际上指向Student对象

    5.1.4什么时候使用

    需要使用子类特有功能(就是父类没有的功能)

    5.2向上造型

    5.2.1概念

    当有子类对象赋值给一个父类引用(或者接口引用)时,便是向上转型;

    5.2.2使用格式:

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

    如:Person p = new Student();

    5.2.3什么时候使用

    当多个子类有相同的方法名,但是方法体不一样的时候;

    父类中的方法可以是抽象方法,可以普通方法;

    向成为千里马奋斗,为伯乐打call;
  • 相关阅读:
    Kaka's Matrix Travels
    Cable TV Network
    LightOJ 1137
    SPOJ AMR11E Distinct Primes 基础数论
    HDU 5533Dancing Stars on Me 基础几何
    POJ 1014 / HDU 1059 Dividing 多重背包+二进制分解
    vijos 1180 选课 树形DP
    vijos 1313 金明的预算方案 树形DP
    LightOJ 1062
    vijos 1464 积木游戏 DP
  • 原文地址:https://www.cnblogs.com/mhy666/p/9347323.html
Copyright © 2020-2023  润新知