首页 > 编程知识 正文

面向对象的三大特性,面向对象中多态的概念

时间:2023-05-05 16:47:27 阅读:111022 作者:3456

本文目录Java面向对象特征的三多态性1 .多态性的定义2 .多态性的分类静多态性动多态性3.up style的好处4 .多态性的实例演示5 .多态性的实现原理6 .多态性的深入理解6.1静多态性(静态绑定、concompond

Java面向对象特征的三多态性1 .多态性的定义

多态性是指一个行为具有多个不同表现形式或形态的能力。 允许不同类的对象响应同一消息。 也就是说,根据发送相同消息的对象的不同,可以采用各种各样的动作。 (发送消息是函数调用)

例如在黑白打印机和彩色打印机中,黑白打印机对打印操作的打印效果是黑白的,彩色打印机打印的效果是彩色的,例如学生和老师,学生的工作是学习,老师的工作是上课; 例如,在鹰和猎豹的情况下,鹰的运动方式是飞翔,猎豹的运动方式是奔跑。

这样,同一行为可以通过不同的东西表现出不同的形态。 这就是多态性。

2 .多态性的分类静多态性静多态性----编译期多态性

静态多态性是指程序在编译时,系统决定调用哪个函数。

方法超载问题时,条件:

相同的作用域

函数名称相同

参数列表不同

多态性动多态性(动态绑定)----运转期多态性

动态多态性是指在执行中可以动态地决定操作指针指向的对象。

移动多态性的条件:

继承

重写方法

特写镜头

在这里我们介绍动多态问题!

3 .升级样式一句话,基类的引用是派生类的对象,基接口的引用是实现该接口的类对象

在上图中,People类是Student的基类,当People类对象的引用变量引用子类的Student类对象时,它就是上图形状。 如下所示。

People people=new Student (;

people参照.出现的方法是父级的方法接口,但方法的安装是子类的安装方式。

Java的多态性机制遵循原则。 如果父对象引用变量以引用子类对象,则被引用对象的类型决定调用方的成员方法,而不是引用变量的类型。 但是,此调用的方法必须在超类中定义。 也就是说,它是覆盖在子类中的方法。

向上样式的好处是减少重复代码,使代码简洁。

提高系统的扩展性。

4 .定义多态性实例表示法People类

public class People { //实例变量protected String name; 受保护的输入; //构建方法publicpeople(stringname,int age ) { this.name=name; this.age=age; //实例方法公共void work () ({ System.out.println )“工作”); Student类定义继承People类

publicclassstudentextendspeople//实例变量private int score; private int stu_id; //构建方法publicstudent(stringname,int age,int score,int stu_id ) { super } name,age; //调用父类的参数构造函数,并初始化从父类继承的实例变量this.score=score的this.stu_id=stu_id; } @Override public void work (() { System.out.println "学习" ); Teacher类定义继承People类

publicclassteacherextendspeople { int tea _ id; publicteacher(stringname,int age,int tea_id ) { super } name,age; this.tea_id=tea_id; } @Override public void work (() { System.out.println )“课程”); }} 图示关系:

使用方法:

public class test demo { publicstaticvoidmain (string [ ] args ) peoplep=newstudent('zs ',18,100,1906 06 11 ); p.work (; peopleP2=newteacher('Lisi ',27,1911 111 ); p2.work (; }} 运行结果及分析:

trong>

通过运行结果我们发现,引用变量p调用的work()是子类Student的方法,引用变量p1调用的work()是子类Teacher的方法。

5.多态的实现原理

多态的实现原理:地址覆盖
以实例中People p = new Student(“zs”,18,100,19060611);为例
图示:

首先我们在Java堆上创建了一个Student对象,People类的引用变量p指向了Student对象,Student对象中的对象头里有一个Class引用,Class引用里保存着Class对象的地址,Class对象是在类加载阶段产生的,一个类一个Class对象,保存当前类的类信息,比如实例变量、实例方法,用Class对象里的RTTI(Run-Time Type identification)机制,运行时进行类型信息识别,通过Class对象找到方法区中该类的方法表,方法表中有从父类继承下来的方法,还有自己方法,父类People中有一个work()方法,子类继承了下来保存在了方法表中,子类中也有个work()方法,对People类中的方法进行了重写,而在方法表中子类的work()方法地址对父类的work()方法地址进行了覆盖,所以当People类的引用变量p调用work()时调用的是子类当中的work()方法。

6.多态的深入理解

对于面向对象而已,多态分为编译时多态和运行时多态。其中编译时多态是静态的,主要是指方法的重载,它是根据参数列表的不同来区分不同的函数,通过编译之后会变成两个不同的函数,在运行时谈不上多态。而运行时多态是动态的,它是通过动态绑定来实现的,也就是我们所说的多态性。

6.1 静多态(静态绑定,编译期多态)

静多态也称编译时的多态,就是我们所说的方法重载。相同的方法名,根据形参类型个数或类型的不同调用不同的方法。在编译期间就已经确定要调用的方法。

6.2 动多态(动态绑定,运行时多态)

所谓动多态就是指程序中定义的引用变量所引用具体对象类型以及通过该引用变量进行方法调用时在编译期并不确定,而是在程序运行期间才确定,即一个引用变量到底会指向哪个类的实例对象,该引用变量发出的方法调用到底是哪个类中实现的方法,必须在由程序运行期间才能决定。因为在程序运行时才确定具体的类,这样,不用修改源程序代码,就可以让引用变量绑定到各种不同的类实现上,从而导致该引用调用的具体方法随之改变,即不修改程序代码就可以改变程序运行时所绑定的具体代码,让程序可以选择多个运行状态,这就是多态性。

多态的优点 可替换性

多态对已存在代码具有可替换性。例如,多态对People类设计,对其他任何人类,如学生,老师也同样具有工作的行为。

可扩充性

多态对代码具有可扩充性。增加新的子类不影响已存在类的多态性、继承性,以及其他特性的运行和操作。实际上新加子类更容易获得多态功能。

接口性

多态是父类通过方法声明,向子类提供了一个共同接口,由子类来完善或者覆盖它而实现的。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。