【Java】继承和多态

文章目录

  • 一、继承
      • 1.继承的例子(is-a)
      • 2.组合的例子(has-a)
  • 二、多态
    • 1.重写
    • 2.重载
  • 三、继承的语法
  • 四、继承的注意事项
      • 1.初始化的顺序:
      • 2.super关键字
  • 五、继承访问限定符
  • 六、多态实现方式
  • 七、多态的理解
    • 注意事项:

一、继承

同c++,继承的思想一脉相承,是为了给现实世界中有is-a关系的事物之间实现代码复用的一种思想。
还有一种关系:has-a。

1.继承的例子(is-a)

比如:猫和狗都是动物,猫和狗就可以继承自动物。

2.组合的例子(has-a)

眼睛和鼻子都属于头,眼睛和鼻子就可以组合成为头。

二、多态

多态是一种事物的多种状态,是一种事物在不同对象上表示出的不同状态的现象。

多态在c++中实现必须使用(纯)虚函数+指针/引用,在Java中需要使用重写。

1.重写

重写和重载相近,但是重写要求更加严苛:
1、函数名相同
2、参数列表相同
3、返回值相同
由上,重写就是在子类中有一个和父类一模一样的函数,只不过是函数体不一样,也正是因为此,才能够使得一个东西在不同对象身上展示出不一样的状态。

2.重载

重载就是将同一个函数名的函数,根据参数列表的不同(顺序、个数、类型),实现为不同的函数,那么这两个同名函数就构成重载。
值得注意的是:不以返回值不同而构成重载

三、继承的语法

使用extends关键字。

四、继承的注意事项

1.初始化的顺序:

先父类,后子类。
在此基础上还有一个原则是先静态代码块,再实例代码块,再构造代码块。(创建多个子类对象时,静态代码块只执行一次)

class Father {
    static {
        System.out.println("父类静态代码块");
    }
    {
        System.out.println("父类实例代码块");
    }
    public Father() {
        System.out.println("父类构造函数");
    }
}
class Son extends  Father{
    static {
        System.out.println("子类静态代码块");
    }
    {
        System.out.println("子类实例代码块");
    }
    public Son() {
        System.out.println("子类构造函数");
    }
}
public class Main {
    public static void main(String[] args) {
        Father father = new Son();
    }
}

执行结果:
执行结果

2.super关键字

1)访问父类成员时需要使用super关键字。
2)当在子类中实现带参父类初始化需要显式调用super完成子类中父类成员的初始化。
在这里插入图片描述

必须第一行写super、不能与this同时出现
在这里插入图片描述
访问父类成员
但是this和super可以同时访问父类对象:
在这里插入图片描述
this可访问的成员是当前整个对象的,但是super更专精些,只能访问到当前对象继承父类的那一部分成员。

五、继承访问限定符

privatedefaultprotectedpublic
同包同类
同包不同类
不同包的子类
不同包非子类

其中包是用来更好管理类的东西(将功能相近的类放在同一个包中)

六、多态实现方式

多态实现方式必须有:
1.继承
2.子类和父类中构成重写(函数名相同、参数列表相同、返回值相同)
3.通过父类引用来调用重写的方法(切片)
在这里插入图片描述
可以使用override进行标注重写

在这里插入图片描述
若不满足重写,则不构成多态:
在这里插入图片描述

七、多态的理解

当同一个方法(构成重写),对于同一个父类类型,但是让他指向不同的子类(发生向上转型),会发生不同的调用,这就是多态。

注意事项:

尽量不要在构造函数中使用实例方法,因为会触发动态绑定,从而发生不愿意看到的结果在这里插入图片描述

  • 子类中的重写方法:

在这里插入图片描述
在构造方法中尽量使用final或者是private方法:
在这里插入图片描述
private:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/18252.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

MGV2000_2+16_当贝纯净桌面卡刷固件包-内有教程

MGV2000_216_当贝纯净桌面卡刷固件包-内有教程 特点: 1、适用于对应型号的电视盒子刷机; 2、开放原厂固件屏蔽的市场安装和u盘安装apk; 3、修改dns,三网通用; 4、大量精简内置的没用的软件,运行速度提…

Python爬虫入门之爬虫解析提取数据的四种方法

本文主要介绍了Python爬虫入门之爬虫解析提取数据的四种方法,通过具体的内容向大家展现,希望对大家Python爬虫的学习有所帮助。 基础爬虫的固定模式 笔者这里所谈的基础爬虫,指的是不需要处理像异步加载、验证码、代理等高阶爬虫技术的爬虫…

数据结构之队列,实现队列的增删改查

目录 一、队列的定义 二、队列的实现 1.使用链表来实现队列 2.实现队列的接口 初始化队列 void QueueInit(Queue *pq) 队尾入队列 void QueuePush(Queue *pq,QDataType data) 队头出队列 void QueuePop(Queue *pq) 获取队列头部元素 QDataType QueueFront(Queue *pq) …

2D火焰特效

Unity面片实现火焰效果 一、效果说明 大家好,我是阿赵。这是一个火焰的效,不过它不是粒子做的,是用一个面片做的,可以理解成是2D的特效。这个例子很简单,但可以拓展一下思路,原来除了用序列帧和粒子做动画…

Cadence Allegro BGA类器件扇孔操作教程

对于BGA扇孔,同样过孔不宜打孔在焊盘上,推荐打孔在两个焊盘的中间位置。很多工程师为了出线方便,随意挪动BGA里面过孔的位置,甚至打在焊盘上面,如图1所示,从而造成BGA区域过孔不规则,易造成后期…

行为型模式-中介者模式

中介者模式 概述 一般来说,同事类之间的关系是比较复杂的,多个同事类之间互相关联时,他们之间的关系会呈现为复杂的网状结构,这是一种过度耦合的架构,即不利于类的复用,也不稳定。例如在下左图中&#xf…

HR如何快速提升工作效率?

从招聘到用人管理各个环节,人力资源部门都是公司最重要的职能部门之一,hr的日常工作涉及众多复杂繁琐的内容,比如人员招聘,考核培训等都离不开大量的数据整理和录入操作,但那些和“人”相关的数据信息,经常…

SOFA Weekly|开源之夏 MOSN 与 Layotto 项目简介、社区会议预告、社区本周贡献

SOFA WEEKLY | 每周精选 筛选每周精华问答,同步开源进展 欢迎留言互动~ SOFAStack(Scalable Open Financial Architecture Stack)是蚂蚁集团自主研发的金融级云原生架构,包含了构建金融级云原生架构所需的各个组件&am…

SpringCloud全面学习笔记之初尝美妙篇

目录 前言初识微服务单体架构分布式架构微服务架构初见SpringCloud微服务治理分布式服务架构案例 微服务组件及使用Eureka注册中心提供者和消费者Eureka的结构和作用搭建Eureka服务注册服务服务发现Eureka注册服务总结 Ribbon负载均衡原理负载均衡原理负载均衡策略懒加载 Nacos…

gtest之高级主题

目录 Value-Parameterized测试示例Value-Parameterized实现 类型测试Type-Parameterized Tests注册test程序获取当前测试程序名运行测试程序选项选择性测试重复测试无序执行分发到不同的机器控制输出Controlling How Failures Are Reported结合Sanitizer Value-Parameterized测…

MySQL读写分离

读写分离配置流程 master和slave机器的信息 IP地址: master(centos7):192.168.131.129 slave(win10):192.168.0.6 保证master和slave之间的网络互通,并且保证3306端口是开放的。 mas…

<IBM AIX><ERRPT><No.001>《出现E86653C3、49183216、8003764C告警的处理 20230506》

《出现E86653C3、49183216、8003764C告警的处理 20230506》 1 现象2 分析3 结论4 引申 1 现象 服务器出现errpt告警,告警为E86653C3、49183216、8003764C。 2 分析 1、hdisk1对应的VG,为rootvg。 lspv |grep hdisk12、查看VG状态 lsvg rootvg说明…

蓝牙耳机哪个品牌最好?数码博主整理2023超高性价比蓝牙耳机推荐

近来收到很多私信不知道蓝牙耳机哪个品牌最好,希望我能进行一期蓝牙耳机推荐,考虑到大家的预算不高,我特意花费时间测评了当下主流品牌的热销平价蓝牙耳机,最终整理成了这份超高性价比蓝牙耳机推荐,感兴趣的朋友们可以…

Spark学习笔记【shuffle】

本文基本上是大数据处理框架Apache Spark设计与实现的Shuffle部分的学习。以及Spark基础知识Bambrow Shuffle解决啥问题 上游和下游,不同stage,不同的task之间是如何传递数据的。ShuffleManager管理ShuffleWrite和ShuffleRead 分为两个阶段&#xff1…

系统安全分析与设计

目录 第五章、系统安全分析与设计1、信息系统安全属性2、对称加密技术与非对称加密技术3、信息摘要4、数字签名5、数字信封与PGP6、网络安全6.1、各个网络层次的安全保障6.2、网络威胁与攻击6.3、防火墙 第五章、系统安全分析与设计 1、信息系统安全属性 安全属性 保密性&…

Vivado 仿真器中以批处理或脚本模式(Batch or Scripted Mode)进行仿真

以下说明来自ug900:在 Vivado 仿真器中以批处理或脚本模式进行仿真 具体可以内容可自行查找 其中代码运行截图为自己实践的实例 Note: xelab, xvlog and xvhdl are not Tcl commands. The xvlog, xvhdl, xelab are Vivado-independent compiler executables. Hence, there is…

pyinstaller打包Mediapipe时遇到的问题

使用pyinstaller对python文件打包 打包流程 安装pyinstaller pip install pyinstaller打包文件 pyinstaller test.py 打包完成后会生成一个dist文件夹,打包的文件会在里面,找到test.exe。 pyinstaller -F test.py 加上-F会把所有的文件打包成一个exe,也是在dist文件夹下…

循环队列、双端队列

循环队列、双端队列 1. 循环队列1.1 循环队列1.2 代码实现1.3 力扣622. 设计循环队列2. 双端队列 1. 循环队列 1.1 循环队列 特殊的队列,首尾相连,空间可重复利用;环形队列常使用数组实现,且为了方便队列的判空、判满处理&#x…

【数据可视化】第五章—— 基于PyEcharts的数据可视化

文章目录 1. pyecharts数据可视化介绍2.pyecharts安装与使用3.全局配置项和系列配置项3.1 全局配置项3.1.1 基本元素配置项3.1.2 坐标轴配置项3.1.3 原生图形配置项 3.2 系列配置项3.2.1 样式类配置项3.2.2 标记类型配置项3.2.3 其它类配置项 4&#xff…

4。计算机组成原理(2)存储系统

嵌入式软件开发,非科班专业必须掌握的基本计算机知识 核心知识点:数据表示和运算、存储系统、指令系统、总线系统、中央处理器、输入输出系统 这一部分主要讲解了CPU的组成和扩容、CPU与存储器(主存、辅存、缓存)的连接 一 存储…
最新文章