【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更专精些,只能访问到当前对象继承父类的那一部分成员。
五、继承访问限定符
| private | default | protected | public | |
|---|---|---|---|---|
| 同包同类 | √ | √ | √ | √ |
| 同包不同类 | √ | √ | √ | |
| 不同包的子类 | √ | √ | ||
| 不同包非子类 | √ |
其中包是用来更好管理类的东西(将功能相近的类放在同一个包中)
六、多态实现方式
多态实现方式必须有:
1.继承
2.子类和父类中构成重写(函数名相同、参数列表相同、返回值相同)
3.通过父类引用来调用重写的方法(切片)

可以使用override进行标注重写

若不满足重写,则不构成多态:

七、多态的理解
当同一个方法(构成重写),对于同一个父类类型,但是让他指向不同的子类(发生向上转型),会发生不同的调用,这就是多态。
注意事项:
尽量不要在构造函数中使用实例方法,因为会触发动态绑定,从而发生不愿意看到的结果
- 子类中的重写方法:

在构造方法中尽量使用final或者是private方法:

private:

相关文章:
【Java】继承和多态
文章目录 一、继承1.继承的例子(is-a)2.组合的例子(has-a) 二、多态1.重写2.重载 三、继承的语法四、继承的注意事项1.初始化的顺序:2.super关键字 五、继承访问限定符六、多态实现方式七、多态的理解注意事项…...
ThingsBoard集群部署之k8s
1、概述 今天终于有时间去搞这个啦,拖了很久了,一直没时间,因为我本地没有那么多机器资源,开虚拟机不够,如果租用阿里云服务器,需要有充值的时间,因为这个费用是按小时付费,需要有连贯的时间来搞才行,今天恰好有时间,就开始搞了,弄成功搞出来了,特地写博客记录下来…...
【Gorm】如何在 GORM 中实现模型之间的关联?
文章目录 关联1、Belongs To(属于)2、Has One(拥有一个)3、Has Many(拥有多个)4、Many To Many(多对多) 关联 当涉及到 ORM(Object-Relational Mapping)的…...
Linux危险命令
rm -rf 命令 该命令可能导致不可恢复的系统崩坏。 rm -rf / #强制删除根目录下所有东西。rm -rf * #强制删除当前目录的所有文件。rm -rf . #强制删除当前文件夹及其子文件夹。fork 炸弹 :() { :|:& };:不太好理解可以转换成 bomb() {bomb|bomb& }; bomb一旦执行…...
FPGA入门系列13--异步串口通信
文章简介 本系列文章主要针对FPGA初学者编写,包括FPGA的模块书写、基础语法、状态机、RAM、UART、SPI、VGA、以及功能验证等。将每一个知识点作为一个章节进行讲解,旨在更快速的提升初学者在FPGA开发方面的能力,每一个章节中都有针对性的代码…...
k8s基础4——deployment控制器、应用部署、升级、回滚、水平扩容缩容
文章目录 一、基本介绍二、应用程序生命周期2.1 部署应用2.2 应用升级2.2.1 修改YAML文件升级(交互式)2.2.2 命令指定镜像版本升级(免交互式)2.2.3 调用vim升级 2.3 滚动升级2.3.1 升级流程 2.4 应用回滚2.4.1 查看历史发布版本2.…...
动态规划算法——40道leetcode实例入门到熟练
目录 t0.解题五部曲1.基础入门题目1.509. 斐波那契数2.70. 爬楼梯3.746. 使用最小花费爬楼梯4.62. 不同路径5.63. 不同路径 II6.343. 整数拆分7.96. 不同的二叉搜索树 2.背包问题1.01背包(二维数组实现)2.01背包(滚动数组实现)1.4…...
Nmap入门到高级【第十一章】
预计更新第一章. Python 简介 Python 简介和历史Python 特点和优势安装 Python 第二章. 变量和数据类型 变量和标识符基本数据类型:数字、字符串、布尔值等字符串操作列表、元组和字典 第三章. 控制语句和函数 分支结构:if/else 语句循环结构&#…...
配置本地Angular环境并使用VsCode调试Angular前端项目
配置本地Angular环境并使用VsCode调试Angular前端项目 配置本地Angular环境部署Node.Js本地环境配置一下环境变量 使用vscode调试Angular安装vscode 配置本地Angular环境 部署Node.Js本地环境 1 从官网下载node.js, 本文为(v16.13.0) 下载地址: https://nodejs.org/dist/v16.…...
100ASK_全志V853-PRO开发板支持人形检测和人脸识别
1.前言 V853 芯片内置一颗 NPU核,其处理性能为最大 1 TOPS 并有 128KB 内部高速缓存用于高速数据交换,支持 OpenCL、OpenVX、android NN 与 ONNX 的 API 调用,同时也支持导入大量常用的深度学习模型。本章提供一个例程,展示如何使…...
简单实现基于UDP与TCP的回显服务器
目录 前言UDP 版的回显服务器需要用到的 api服务端客户端UDP 版本的字典客户端和字典服务器 TCP 版的回显服务器需要用到的 api服务器客户端对服务器进行改进(使用线程池)TCP 版本的字典客户端和字典服务器 前言 我们写网络程序, 主要编写的是应用层代码. 真正要发送这个数据,…...
家用洗地机有什么推荐的吗?家用洗地机哪款好
洗地机是创新、高效的清洁工具,其具有高性能的清洁能力和卓越的操作体验。与传统的清洁工具相比,洗地机可以迅速而彻底地打扫地面,降低清洁时间和人力成本,让我们在工作之余不用花费大量的时间和精力去打扫卫生,下面就…...
深度学习与文本聚类:一篇全面的介绍与实践指南
❤️觉得内容不错的话,欢迎点赞收藏加关注😊😊😊,后续会继续输入更多优质内容❤️ 👉有问题欢迎大家加关注私戳或者评论(包括但不限于NLP算法相关,linux学习相关,读研读博…...
AP5153 线性降压恒流驱动芯片 2.5A
AP5153 是一种 PWM 调光的、低压 差的 LED 线性降压恒流驱动器。 AP5153 仅需要外接一个电阻和一个 NMOS 管就可以构成一个完整的 LED 恒 流驱动电路, 调节该外接电阻就可以调节 输出电流,输出电流可调范围为 20mA 到 3.0A。 AP5153 还可以通过在 DIM…...
Unity物理系统脚本编程(下)
一、修改物理材质 Unity对物体表面材料的性质做了件化处理,仅有5种常用属性: Dynamic Friction(动态摩擦系数)Static Friction(静态摩擦系数)Bounciness(弹性系数)Friction Combine…...
容器技术的发展
容器技术的发展 近年来,随着计算机硬件、网络以及云计算等技术的迅速发展,云原生的概念也越来越受到业界人士的广泛关注,越来越多的应用场景开始拥抱云原生,其中容器技术的发展起着至关重要的作用。本章将介绍容器技术的基础知识…...
Python Flask request中常见存储参数的介绍
Python Flask request中常见存储参数的介绍 首先从flask模块中导入请求对象: from flask import requestrequest.form 通过method属性可以操作当前请求方法,通过使用form属性处理表单数据(本质也是得到一个字典,如果传输的是字…...
php+vue网盘系统的设计与实现
该网盘系统的开发和设计根据用户的实际情况出发,对系统的需求进行了详细的分析,然后进行系统的整体设计,最后通过测试使得系统设计的更加完整,可以实现系统中所有的功能,在开始编写论文之前亲自到图书馆借阅php书籍&am…...
[前端]深浅拷贝
一、回顾变量类型 基础类型 boolean(bool) number string null undefined 引用类型 object function array 基本类型与引用类型的存储 基本类型一般存储在 栈 (栈小) 栈一旦确认 大小就固定 可能会造成溢出栈一般是先进后出用于存储…...
文章纠错免费软件-文字校对软件免费下载
自动校对稿件的软件 自动校对稿件的软件是一种基于自然语言处理(Natural Language Processing, NLP)和机器学习(Machine Learning)技术的工具,可以较为准确地检测和纠正文本中出现的语法、拼写、标点符号以及其他笔误…...
后进先出(LIFO)详解
LIFO 是 Last In, First Out 的缩写,中文译为后进先出。这是一种数据结构的工作原则,类似于一摞盘子或一叠书本: 最后放进去的元素最先出来 -想象往筒状容器里放盘子: (1)你放进的最后一个盘子(…...
web vue 项目 Docker化部署
Web 项目 Docker 化部署详细教程 目录 Web 项目 Docker 化部署概述Dockerfile 详解 构建阶段生产阶段 构建和运行 Docker 镜像 1. Web 项目 Docker 化部署概述 Docker 化部署的主要步骤分为以下几个阶段: 构建阶段(Build Stage):…...
OpenLayers 可视化之热力图
注:当前使用的是 ol 5.3.0 版本,天地图使用的key请到天地图官网申请,并替换为自己的key 热力图(Heatmap)又叫热点图,是一种通过特殊高亮显示事物密度分布、变化趋势的数据可视化技术。采用颜色的深浅来显示…...
设计模式和设计原则回顾
设计模式和设计原则回顾 23种设计模式是设计原则的完美体现,设计原则设计原则是设计模式的理论基石, 设计模式 在经典的设计模式分类中(如《设计模式:可复用面向对象软件的基础》一书中),总共有23种设计模式,分为三大类: 一、创建型模式(5种) 1. 单例模式(Sing…...
使用VSCode开发Django指南
使用VSCode开发Django指南 一、概述 Django 是一个高级 Python 框架,专为快速、安全和可扩展的 Web 开发而设计。Django 包含对 URL 路由、页面模板和数据处理的丰富支持。 本文将创建一个简单的 Django 应用,其中包含三个使用通用基本模板的页面。在此…...
java_网络服务相关_gateway_nacos_feign区别联系
1. spring-cloud-starter-gateway 作用:作为微服务架构的网关,统一入口,处理所有外部请求。 核心能力: 路由转发(基于路径、服务名等)过滤器(鉴权、限流、日志、Header 处理)支持负…...
UE5 学习系列(三)创建和移动物体
这篇博客是该系列的第三篇,是在之前两篇博客的基础上展开,主要介绍如何在操作界面中创建和拖动物体,这篇博客跟随的视频链接如下: B 站视频:s03-创建和移动物体 如果你不打算开之前的博客并且对UE5 比较熟的话按照以…...
如何将联系人从 iPhone 转移到 Android
从 iPhone 换到 Android 手机时,你可能需要保留重要的数据,例如通讯录。好在,将通讯录从 iPhone 转移到 Android 手机非常简单,你可以从本文中学习 6 种可靠的方法,确保随时保持连接,不错过任何信息。 第 1…...
在WSL2的Ubuntu镜像中安装Docker
Docker官网链接: https://docs.docker.com/engine/install/ubuntu/ 1、运行以下命令卸载所有冲突的软件包: for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done2、设置Docker…...
Map相关知识
数据结构 二叉树 二叉树,顾名思义,每个节点最多有两个“叉”,也就是两个子节点,分别是左子 节点和右子节点。不过,二叉树并不要求每个节点都有两个子节点,有的节点只 有左子节点,有的节点只有…...
