zoukankan      html  css  js  c++  java
  • 多态

    多态的概念

      多态主要是指同一种事物表现出来的多种形态。

        饮料:可乐、雪碧、红牛、脉动、。。。

        宠物:猫、狗、鸟、小强、鱼、。。。

        人:学生、教师、工人、保安、。。。

        图形:举行、圆形、梯形、三角形、。。。

    多态的语法格式

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

    如:

      Shaper sr = new Rect();

      sr.show();

    多态的特点

      当父类类型的引用指向子类类型的对象时,父类类型的引用可以直接调用父类独有的方法。

      当父类类型的引用指向子类类型的对象时,父类类型的引用不可以直接调用子类独有的方法。

      对于父子类都有的非静态方法来说,编译阶段调用父类版本,运行阶段调用子类重写的版本(动态绑定)。

      对于父子类都有的静态方法来说,编译和运行阶段都调用父类版本。

    引用数据类型之间的转换

      引用数据类型之间的转换方式有两种:自动类型转换 和 强制类型转换。

      自动类型转换主要指小类型向大类型的转换,也就是子类型转为父类型,有叫做向上转型。

      强制类型转换主要指大类型向小类型的转换,也就是父类型转换为子类,也叫做向下转型或显示类型转换。

      若强制的目标类型并不是该引用真正指向的数据类型时则编译通过,运行阶段发生类型转换异常。

      为了避免上述错误的发生,应该在强转之前进行判断,格式如下:

        if(引用变量 instanceof 数据类型)

        判断引用变量指向的对象是否为后面的数据类型

    案例1:演示多态的使用,引用数据转换

    父类Shape:

     子类Rect:

     

     测试类ShapeRectTest:

     

    多态的实际意义:

      多态的实际意义在于屏蔽不同子类的差异性实现通用的编程带来不同的效果。

    案例1-2、多态的使用场合一:通过参数传递形成多态

    扩展类:Circle

     测试类:ShapeTest

    案例2、多态的使用场合之二: 直接在方法体中使用抽象类的引用指向子类类型的对象

     总结:

      在测试类中编写draw方法,把两个子类传入调用各自的方法。

      使用多态的形式,在编译阶段传入父类的参数,运行阶段调用子类的方法

  • 相关阅读:
    cocos2d-x CCNotificationCenter一个优化想法
    【备忘】尾调用(尾递归)--来自维基百科
    [转] 关于Mongodb的全面总结,学习mongodb的人,可以从这里开始
    [转]编程修养
    DirectX11 SDK 例程报错解决方法
    unity3d Vector3.Lerp解析
    unity3d 三分钟实现简单的赛车漂移
    Unity 5.3.1 No Android/IOS module loaded
    unity3d 音频无缝循环
    unity3d 扩展NGUI Tweener —— TweenTime
  • 原文地址:https://www.cnblogs.com/xujiaqi/p/13592429.html
Copyright © 2011-2022 走看看