面向对象中—-多态

一·认识多态

在面向对象三大特征中,多态与封装,继承亦有着紧密的联系。那首先我们来认识,什么是多态

多态:顾名思义,是一个事物中有多种存在的形态。我们可以分为以下两点来理解:

  • 行为多态: 同种行为对于不同的人有不一定结果

举个例子:在一次考试中,老师对不同学生进行打分,老师打分这一动作是相同的,但同学对于打分后的成绩,会有着不同的心理感受,我们便说,这些不同的感受为行为多态

  • 对象多态: 个人在生活中有不同的身份

在生活中,每个人都扮演着不同的角色。比如小编:即是一个学生,也是一个写作者,也是一位儿子,各位的朋友。扮演着不同身份的我们,便就是一种对象多态了。

多态使用的前提

  • 多态依赖于继承关系的前提和函数重写的实现。
  • 有父类引向子类的对象

多态中调用成员的特点

  • 变量调用:编译看左边,运行也看左边。
  • 方法调用:编译看左边,运行看右边。
  • 多态的表示:父类 对象名=new 子类();

我们来看看成员变量的访问特点:

创造一个父类Anminal 子类Dog;

分别定义成员变量name进行赋值;

在Test测试中,写出Anminal A =new Dog();这么一个多态, 打印name的值

运行下面代码可以发现,打印出来为"动物"

所以我们得出这么一个特点:变量的调用,是编译看父类,运行也看父类。

多态中调用成员方法的特点

编译看左边,运行看右边

我们依旧创建父类Anminal 和子类Dog来进行探究

在Test测试中,调用eat()方法

运行结果如下

所以我们可以得出:编译看左边,运行看右边。

至于方法调用为什么是这么实现的?小编是这么理解的,多态在继承中的基础上实现,父类为最大类,在程序执行过程中,系统优先往一个大盒子中(父类)寻找方法的调用,故可以理解为编译看左边这一特点, 至于运行时,由于方法调用时,子类对父类的方法进行了重写,此时重写的方法对父类进行了覆盖,所以运行的时候,便是实现了子类的方法。

多态中,对象的类型转化

正是由于多态中成员方法------编译看左边,运行看右边的特点。所以,多态中有这么一个弊端:无法共享子类中特有的方法。

我们在上面的子类中,创造了一个lookhome()的方法,并在测试中调用发现,多态中Anminal中的a无法访问子类的lookhome。此时便用到了我们的强制类型转化。

在a名的前面添加(Dog)引用类型进行强制转化--可以类比之前int转化成double类型。

测试发现能b.lookhome成功调用了

但是注意,子类之间,不能进行强制类型转化--比如同子类中的猫和狗,是不能够将狗类的特性转化成猫类的特性的,只能在父子类之间进行转化。

多态的好处

要求一个学校系统:获得学生,老师,管理员的基本信息

我们创建以上三个子类,并采用多态的方法。

此刻我们便能将三个人的参数写成一个父类People进行参数传递。

能发现,多态的好处是:

  • 能简化代码,提高代码的复用性。(实现了继承)
  • 提高代码的拓展性,能创造子类时又不影响其他父子类。
    以上便是多态的一些基础知识,后面多态还能与抽象类中,内部类中的知识进行串联运用,我们下次再见.
相关推荐
H5css�海秀6 小时前
今天是自学大模型的第一天(sanjose)
后端·python·node.js·php
SuniaWang6 小时前
《Spring AI + 大模型全栈实战》学习手册系列 · 专题六:《Vue3 前端开发实战:打造企业级 RAG 问答界面》
java·前端·人工智能·spring boot·后端·spring·架构
韩立学长6 小时前
Springboot校园跑腿业务系统0b7amk02(程序、源码、数据库、调试部署方案及开发环境)系统界面展示及获取方式置于文档末尾,可供参考。
数据库·spring boot·后端
sheji34166 小时前
【开题答辩全过程】以 基于springboot的扶贫系统为例,包含答辩的问题和答案
java·spring boot·后端
代码栈上的思考7 小时前
消息队列:内存与磁盘数据中心设计与实现
后端·spring
程序员小假8 小时前
我们来说一下 b+ 树与 b 树的区别
java·后端
Meepo_haha8 小时前
Spring Boot 条件注解:@ConditionalOnProperty 完全解析
java·spring boot·后端
sheji34169 小时前
【开题答辩全过程】以 基于springboot的房屋租赁系统的设计与实现为例,包含答辩的问题和答案
java·spring boot·后端
Victor3569 小时前
MongoDB(57)如何优化MongoDB的查询性能?
后端
Victor3569 小时前
MongoDB(58)如何使用索引优化查询?
后端