【无标题】

本文详细介绍了多态的概念,包括其定义、构成条件和实现方式。通过父类引用调用虚函数是多态的基础,同时探讨了引用多态和方法多态的应用。强调了在多态中成员变量、静态方法和非静态方法的特点,并提到了向上转型和向下转型。此外,还区分了重写(运行时多态)和重载(编译时多态)的区别。
摘要由CSDN通过智能技术生成

活动地址:CSDN21天学习挑战赛

1. 多态的概念
1.1 概念
多态的概念:通俗来说,就是多种形态,具体点就是去完成某个行为,当不同的对象去完成时会产生出不同的状态。

2. 多态的定义及实现
2.1多态的构成条件
多态是在不同继承关系的类对象,去调用同一函数,产生了不同的行为。
那么在继承中要构成多态还有两个条件:

必须通过基类的指针或者引用调用虚函数
被调用的函数必须是虚函数,且派生类必须对基类的虚函数进行重写

对象的转型(casting)

父类引用指向子类对象,我们称这个过程为向上转型,属于自动类型转换

向上转型后的父类引用变量只能调用它编译类型的方法,不能调用它运行时类型的方法。这时,我们就需要进行类型的强制转换,我们称之为向下转型!

多态怎么用
      A、引用多态
                      父类的引用可以指向本类的对象;

                      Fu fu=new Fu();

                      父类的引用也可以指向子类的对象;

                      Fu fu =new Zi();

                    剖析:Fu fu=new Zi();

                    这句话分为两段,下面这样写会更加明确些

                    1、Fu fu  ;  声明一个变量fu为Fu这个类,

                    2、fu=new Zi(); 创建一个Zi类对象赋给了fu变量

                    这句话的作用是得到了一个被Zi类函数覆盖后的Fu类对象:fu

                    明确:fu是Fu类的,更具体的说是被zi类覆盖后的fu类的对象!从头到尾都是fu类。

                    进一步结论:   【多态时成员变量、静态方法和非静态方法的特点】

                    1、fu类原有的变量和静态方法(因为没被zi类覆盖的方法)没有任何变化,所以编译和运行都看fu类。

                    2、而fu类中的非静态方法(被zi类覆盖)发生了变化,在编译阶段看fu类的(看fu类有没有,有的话编译通过),运行的时候运行的是zi类的代码。

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

      B、方法多态
根据上述创建的两个对象:本类对象和子类对象,同样都是父类的引用,当我们指向不同的对象时,它们调用的方法也是多态的。

创建本类对象时,调用的方法为本类方法;

创建子类对象时,调用的方法为子类重写的方法或者继承的方法;

使用多态的时候要注意:如果我们在子类中编写一个独有的方法(没有继承父类的方法),此时就不能通过父类的引用创建的子类对象来调用该方法!!!(因为fu是Fu对象,他并没有子类的方法)

多态也会涉及到向上转型和向下转型(都是编译时期的转型),而向下转型又可以引出泛型

转型:

·向上转型:【自动】父类 父类对象 = 子类实例;

Fu f=new zi();

·向下转型:【强制】子类 子类对象 = (子类)父类实例;

Zi z=(zi)f;

多态一般可以分为两种,一个是重写override(运行时多态),一个是重载overload(编译时多态)。
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值