多态性

原创 2018年04月16日 21:23:27

在面向对象的设计中,多态主要体现在向不同的对象发送同一个信息,不同的对象在接收时会产生不同的行为(即方法),对像可以用自己的方法去响应共同的信息。( 多态:在同一个时刻,体现出来的不同状态)

多态性主要体现在两个方面:方法重载实现的静态多态性(编译时多态)

                                          方法重写实现的动态多态性(又称动态连编)

编译时多态:在编译阶段,具体调用那个被重载的方法,编译器会根据参数的不同来静态确定调用的方法。

动态联编:由于子类继承了父类的所有属性(除过私有),所以子类对象可以作为父类对象的使用,程序中凡是使用父类对象的地方,都可以用子类对象来代替,一个对象可以通过子类的实例来调用子类的方法。

  多态的前提:
   1)必须有继承关系
   子类继承父类,存在一些特点
  2)必须有方法重写
   子类继承父类,方法重写的目的,举例:动物吃的方法,每一个具体动物吃的东西不一样,所有必须要方法覆盖
3)就是必须有父类的引用指向子类对象 (向上转型)
         父类名  fu = new  子类名() ;
                 通过父类对象的创建是通过子类在堆内存新建了了一个对象,由于子类又继承了父类,父类的引用(初始化)是通过子类新建对象进行的..
 多态中的成员访问特点:
1)成员变量: 编译看左,运行看左...
2)成员方法(非静态): 编译看左,运行看右(存在方法重写)
   3)构造方法:构造方法(无论子类,还是父类),都是对对象进行初始化

4)静态成员方法:     编译看左,运行看左(静态跟类有关系,算不上方法重写)

多态的好处:
可以提供代码的复用性:继承保证

可以提高的代码的扩展性:由多态保证...  (父类的引用指向子类对象)

 多态的弊端:
父类引用指向子类对象,

   通过父类的引用调用子类特有功能,不能调用....

      不能访问子类特有功能
  Father3 f  = new Son3() ;   父类的引用指向子类对象 (向上转型)
  
      可不可以将子类的引用指父类的引用呢? (向下转型)
将父类的引用强制转换子类的引用

    将父类的引用强制转换子类的引用  ,向下转型使用不当,会出现一个异常:属于运行时期异常:ClassCastException

父类对象和子类对象的转化需要注意如下原则:

一:子类对象可视为是其父类的一个对象

二:父类对象不能被当做是其某一个子类的对象

三:如果一个方法定义的是父类对象,那么调用这个方法时,可以使用子类对象作为实际参数。



Linux环境C++编程基础视频课程

基于C++面向对象编程基础知识讲解。内容包括: 1.C++对C的扩充 2.类与对象 3.继承与派生 4.多态与虚 函数 5.输入输出流 6.标准模板库
  • 2016年07月27日 20:42

面向对象-多态性

 面向对象的软件开发语言具有三个重要的特点分别为封装性、继承性、多态性。封装性即意味着对象封装其内部的数据,使其对外不可见,以保证数据的安全性。继承性是代码复用的一个很好的解决方案,但是继承关系是编译...
  • slg_sparkler
  • slg_sparkler
  • 2007-03-21 22:28:00
  • 2372

C++ 多态性有哪些

C++多态性有哪些?       概念:指相同的对象收到不同的消息或者不同的对象收到相同的消息时产生的不同的实现动作。 C++支持两种多态:编译时多态(静态)、运行时多态(动态) (1)编译时多态...
  • YF_Li123
  • YF_Li123
  • 2017-07-03 21:50:50
  • 3359

C++复习笔记(3)类的多态性

多态是指同样的消息被不同类型的对象接收时导致不同的行为。 面向对象的多态可以分为4种: (1)重载多态:包括C++中的函数重载以及运算符重载(实际上也是函数重载); (2)强制多态:例如浮点数与整型数...
  • lhanchao
  • lhanchao
  • 2016-09-19 21:27:21
  • 516

C#多态性基础实现

多态分为两种情况,一种是编译的时候的多态性,一种是运行时的多态性。 编译时的多态性:编译时的多态性是通过重载来实现的。对于非虚的成员来说,系统在编译时,根据传递的参数、返回的类型等信息决定实现何种操作...
  • zc474235918
  • zc474235918
  • 2014-02-09 17:45:35
  • 2338

关于C++多态性的一些总结

在学习过程中对多态特性的实现方式及其实现原理的一些总结
  • Phoenix500526
  • Phoenix500526
  • 2015-03-31 07:59:49
  • 913

继承和方法重写如何支持多态性

运行时多态性是面向对象程序设计代码重用的一个最强大机制,动态性的概念也可以被说成“一个接口,多个方法”。Java实现运行时多态性的基础是动态方法调度,它是一种在运行时而不是在编译期调用重载方法的机制,...
  • jifengshuai
  • jifengshuai
  • 2008-10-20 16:18:00
  • 1538

多态性(二)——动态多态性之虚函数

1.虚函数的作用   C++中的虚函数是用于解决动态多态性的问题。所谓虚函数,就是在基类声明函数是虚拟的,并不是实际存在的函数,然后在派生类中才正式定义此函数。 那么虚函数有何作用呢?我们先来看看这样...
  • zcmlimi
  • zcmlimi
  • 2015-03-05 11:26:01
  • 621

Java-6.22-接口多态性

要点: 接口产生的多态是指不同类在实现同一个接口的时候有不同的实现方式,那么接口变量在回调接口方法时就可以产生多种形态。 代码: ComputerAverage.java public int...
  • qq_34216631
  • qq_34216631
  • 2016-10-16 13:29:51
  • 502

C++多态性与虚函数理解

《Effective C++》一书中第七条:Declare destructors virtual in polymorphic base classes 用于多态的基类中的析构函数应该声明为虚函数。...
  • King_DJF
  • King_DJF
  • 2017-03-20 15:27:12
  • 344
收藏助手
不良信息举报
您举报文章:多态性
举报原因:
原因补充:

(最多只允许输入30个字)