Java多态

1.什么是多态

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

2.构成多态的条件

多态在Java中指对于不同继承关系的类对象,去调用同一函数,产生了不同的行为。

由此可知构成多态需要:

        1、必须通过基类的指针或者引用调用函数

        2、被调用的函数必须是虚函数,且子类必须对父类的虚函数进行重写

什么是虚函数:

        被virtual修饰的类成员函数;子类虚函数和父类虚函数的返回类型、函数名字、参数列表完全相同;

虚函数重写(覆盖)

        子类中有一个跟父类完全相同的虚函数,称子类的虚函数重写了父类的虚函数

    

3.抽象类/接口类

1、概念   

        在虚函数后加上=0,则称这个函数为纯虚函数。包括纯虚函数的类叫抽象类(接口类),接口类不能实例化出对象,其子类继承后也不能实例化出对象,除非重写纯虚函数。

        纯虚函数体现出了接口继承。

2.接口继承和实现继承

        虚函数的继承是一种接口继承,子类继承的是父类虚函数的接口,目的是为了重写,达成多态,继承的是接口。若不实现多态不需将函数定义为虚函数。

4.多态的原理

1.虚函数表

        除了原有成员,还会产生一个指针对象,称为虚函数表指针(_vfptr)

        一个含有虚函数的类中至少都有一个虚函数表指针,因为虚函数的地址要被放到虚函数表中,虚函数表也称虚表。

2.虚函数存在在哪里?虚表存在在哪里?

        虚表存的是虚函数指针,不是虚函数;虚函数和普通函数一样,都存在在代码段,只是与此同时他的指针又存在于虚表内。此外,对象中存的不是虚表,是虚表指针。

3.多态的原理

由于虚表中,虚函数指针指向不同,在调用同一函数时会指向不同地址,因而结果不同

4.动态绑定与静态绑定

1.静态绑定又称前期绑定(早绑定/静态多态),在程序编译期间确定了程序的行为,如:函数重载

2.动态绑定又称后期绑定(晚绑定/动态多态),在程序运行期间根据具体拿到的类型确定程序的具体行为;

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值