03.11 内存复讲 面向对象的多态性

在这里插入图片描述
在这里插入图片描述

面向对象多态

面向对象的特征:

1.继承:继承最大的好处重用父类的内容,重用代码。只要满足is-a关系就是继承关系。给多态做了铺垫。
2.封装:隐藏了类内部的细节,可以达到保护数据的行为。 get方法 获取属性 的值 set方法改变属性的值
3.多态:多种形态
一个对象的多种形式

在oop中多态是什么意思

对象的多种形式和能力

分类

1、静态多态 :在编译期间,程序就能决定调用哪个方法
2、动态多态:在程序运行期间,才能决定调用对象的哪个方法

静态多态

方法的重载就表现出了静态多态
在这里插入图片描述
静态多态:相同的行为,不同的表现形式(在不同环境下)(一般变现在方法的重载)

动态多态

1.在继承环境下,父类对象引用指向子类对象。(在操作的时候并不是知道具体的子类内容,父类给我们提供了行为,当代码运行的时候决定执行哪一个行为,包括是执行父类的行为还是子类的行为)

特点:
1、父类对象可以将引用指向子类对象,也可以指向本类对象(不同的类中有相同 的行为)
(在栈中开辟一个wine空间,在堆中开辟一个JNC对象空间,在执行的过程中,优先调用子类方法区中的drink重写的方法)
在这里插入图片描述
2.多态其实是指方法的多态:创建本类对象,调用的就是本类的方法;创建的是子类对象,调用的是子类的方法;
3.如果子类没有重写父类的方法,默认就调用子类继承的方法(父类的方法)
4.只能父类对象引用指向子类对象,不能反过来 子类引用指向父类

静态多态和动态多态

相同点:都是方法的多态,在代码执行的过程中调用不同方法达到不同效果
不同点:静态多态重载来实现的,动态多态是用重写来实现的。静态多态一个类的多个方法,相同行为不同表现形式
动态多态在运行的时候在决定执行的是某个子类里面的方法,将多态的方法分配到每个子类里面

对象的自动转型

通过父类引用指向子类对象,其实子类自动转型成了父类的数据类型,在继承中子类重写了父类的方法,提供的方法比父类更加强大。

在这里插入图片描述

对象的强制转型

传递值是父类对象,在类里面父类要用到子类的属性,要将父类对象强制转型成子类对象(向下转型)
在这里插入图片描述
在这里插入图片描述
向上转型存在一定的缺陷,将子类转换为父类对象,调用的时候只能调用父类有的属性和行为,子类自己扩展的属性和行为无法使用。向下转型的好处,可以调用子类继承的属性和方法,还可以调用扩展的内容。

instanceof

java的多态性导致了引用变量类型和实际引用的对象类型可以不一致。为了更准确区分出引用的是什么类型的对象,java引入了instanceof运算符

但是在java中不推荐使用它
在这里插入图片描述

多态存在的三个必要条件

1.要有继承(两个类之间存在继承关系,子类要继承父类)
2.要有重写(子类继承父类,子类一定要重写父类的方法)
3.父类引用指向子类对象
三个满足就符合多态的特征。

猜你喜欢

转载自blog.csdn.net/Theniceday_99/article/details/88403651