Java学习笔记——继承(包括this,super的使用总结)
继承:
使用情景:当类与类之间,存在相同(共性)的内容,并满足子类是父类的一种,就可以考虑使用继承,来优化代码
- Java中提供一个关键字extends,用这个关键字,我们可以让一个类和另一个类建立起继承关系 public class Student extends Person{};
- Student被称为子类(派生类),person称为父类(基类或超类)
继承的格式:public class 子类 extends 父类{}
使用继承的好处
- 可以把多个子类中重复的代码抽取到父类中了,提高代码的复用性
- 子类可以在父类的基础上,增加其他功能,使子类更强大
继承的特点:Java只支持单继承不支持多继承,但支持多层继承
注:
- 单继承:一个子类只能继承一个父类
- 不支持多继承:子类不能同时继承多个父类
- 多层继承:子类A继承父类B,父类B可以继承父类C
- 每一个类都直接或者间接的继承于Object
- 子类只能访问父类中非私有的成员
子类到底能继承父类中的哪些内容:
构造方法 | 非私有 不能 | private 不能 |
成员变量 | 非私有 能 | private 能 |
成员方法 | 能被添加入虚方法表 能 | 否则不能 |
注:虚方法可以被覆写(Overriding)的方法都可以称作虚方法,因此虚方法并不需要做特殊的声明,也可以理解为除了用static、final、private修饰之外的所有方法都是虚方法。
特点:
1.成员变量的访问特点:就近原则(谁离我近,我就用谁)
先在局部位置找然后在本类成员位置找然后在父类成员位置找,逐级往上。
若重名,则sout(name);为从局部位置开始往上找
sout(this.name);为从本类成员位置开始往上找
sout(super.name);为从父类成员位置开始往上找
2.成员方法的继承特点:
- 直接调用满足就近原则:谁离我近,我就用谁
- super调用,直接访问父类
方法的重写
当父类的方法不能满足子类现在的需求时,需要进行方法重写
书写格式:在继承体系中,子类出现了和父类一模一样的方法声明,我们就称子类这个方法是重写的方法
@Override重写注解
- @Override是放在重写后的方法上,校验子类重写时语法是否正确
- 加上注解后如果有红色波浪线,表示语法错误。
- 建议重写方法都加@Override注解,代码安全,优雅!
方法重写的注意事项和要求
- 重写方法的名称,形参列表必须与父类中的一致
- 子类重写父类方法时,访问权限必须大于等于父类(暂时了解:空着不写<protected<public )
- 子类重写父类方法时,返回值类型子类必须小于等于父类
- 建议:重写的方法尽量和父类保持一致
- 私有方法不能被重写
- 子类不能重写父类的静态方法
- (5,6点总结)只有被添加到虚方法表中的方法才能被重写
构造方法的继承特点:
- 父类中的构造方法不会被子类继承
- 子类中所有的构造方法默认先访问父类中的无参构造,再执行自己
为什么?
- 子类在初始化的时候,有可能会使用到父类中的数据,如果父类没有完成初始化,子类将无法使用父类的数据
- 子类初始化之前,一定要调用父类构造方法先完成父类数据空间的初始化
怎么调用父类构造结构的?
- 子类构造方法的第一行语句默认都是:super(),不写也存在,且必须在第一行
- 如果想调用父类有参构造,必须手动写super进行调用
继承中构造方法的访问特点:
- 子类不能继承父类的构造方法,但是可以通过super调用
- 子类构造方法的第一行,有一个默认的super()
- 默认先访问父类中无参的构造方法,再执行自己
- 如果想要方法文父类有参构造,必须手动书写
this、super的使用总结
- this:理解为一个变量,表示当前方法调用者的地址值
- super:代表父类存储空间
关键字 | 访问成员变量 | 访问成员方法 | 访问构造方法 |
this | this.成员方法 访问本类成员方法 | this.成员方法(...) 访问本类成员方法 | this(...) 访问本类构造方法 |
super | super.成员方法 访问父类成员方法 | super.成员方法(...) 访问父类成员方法 | super(...) 访问父类构造方法 |
练习:
package itheimaoopextenceao5;public class Employee {private String id;private String name;private double salary;public Employee() {}public Employee(String id, String name, double salary) {this.id = id;this.name = name;this.salary = salary;}/*** 获取* @return id*/public String getId() {return id;}/*** 设置* @param id*/public void setId(String id) {this.id = id;}/*** 获取* @return name*/public String getName() {return name;}/*** 设置* @param name*/public void setName(String name) {this.name = name;}/*** 获取* @return salary*/public double getSalary() {return salary;}/*** 设置* @param salary*/public void setSalary(double salary) {this.salary = salary;}public String toString() {return "Employee{id = " + id + ", name = " + name + ", salary = " + salary + "}";}public void work(){System.out.println("员工在工作");}public void eat(){System.out.println("吃米饭");}
}
package itheimaoopextenceao5;public class Manager extends Employee {private double bouns;public Manager() {}public Manager(String id, String name, double salary, double bouns) {super(id, name, salary);this.bouns = bouns;}public double getBouns() {return bouns;}public void setBouns(double bouns) {this.bouns = bouns;}@Overridepublic void work(){System.out.println("管理他人");}}
package itheimaoopextenceao5;public class cooker extends Employee {public cooker() {}public cooker(String id, String name, double salary) {super(id, name, salary);}@Overridepublic void work(){System.out.println("厨师正在炒菜");}
}
package itheimaoopextenceao5;public class Test {public static void main(String[] args) {Manager m=new Manager("heima001","zhangsan",4000,2000) ;System.out.println(m.getId()+","+m.getName() +","+m.getSalary() +","+m.getBouns() );m.eat() ;m.work() ;}
}
相关文章:
Java学习笔记——继承(包括this,super的使用总结)
继承: 使用情景:当类与类之间,存在相同(共性)的内容,并满足子类是父类的一种,就可以考虑使用继承,来优化代码 Java中提供一个关键字extends,用这个关键字,我…...
Android 获取应用sha1和sha256
在 Android 应用开发中,SHA-1(Secure Hash Algorithm 1)值是一种哈希算法,常用于生成应用的数字签名。这个数字签名用于验证应用的身份,并确保应用在发布到设备上时没有被篡改。 以下是生成 Android 应用的 SHA-1 值的…...
c# 方法参数修饰符(out、ref、in)的区别
在C#中,ref、out和in是三种方法参数修饰符,它们在传递参数的方式和作用上有所不同。 ref修饰符: 传递方式:使用ref修饰符的参数可以是输入输出参数,即在方法调用前后都可以对其进行修改。 作用:通过ref修…...
shell 编写一个带有进度条的程序安装脚本
需求 使用 shell 写一个 软件安装脚本,带有进度条 示例 #!/bin/bash# 模拟软件安装的步骤列表 steps("解压文件" "安装依赖" "配置设置" "复制文件" "")# 计算总步骤数 total_steps${#steps[]}# 安装进度的初…...
服务器数据恢复-AIX PV完整镜像方法以及误删LV的数据恢复方案
AIX中的PV相当于物理磁盘(针对于存储来说,PV相当于存储映射过来的卷;针对操作系统来说,PV相当于物理硬盘),若干个PV组成一个VG,AIX可以将容量不同的存储空间组合起来统一分配。AIX把同一个VG的所…...
首席执行官Adam Selipsky解读“亚马逊云科技的技术产品差异化”
迄今为止,亚马逊云科技已经参与了21世纪几乎所有的大型计算变革,亚马逊云科技是一个很传奇的故事,它始于大约20年前的一项实验,当时亚马逊试图出售其过剩的服务器。人们确实对此表示怀疑。为什么在线书店试图销售云服务࿱…...
C++ Day3
目录 一、类 【1】类 【2】应用实例 练习: 【3】封装 二、this指针 【1】this指针的格式 【2】必须使用this指针的场合 三、类中的特殊成员函数 【1】构造函数 i)功能 ii)格式 iii)构造函数的调用时机 iv)…...
OpenEuler 安装mysql
下载安装包 建议直接使用在openEuler官方编译移植过的mysql-5.7.21系列软件包 参考:操作系统迁移实战之在openEuler上部署MySQL数据库 | 数据库迁移方案 | openEuler社区官网 MySQL 5.7.21 移植指南(openEuler 20.03 LTS SP1) | 数据库移植…...
[Docker] Windows 下基于WSL2 安装
Docker 必须部署在 Linux 内核的系统上。如果其他系统想部署 Docker 就必须安装一个虚拟 Linux 环境。 1. 开启虚拟化 进入系统BIOS(AMD 为 SVM;Intel 为 Intel-vt)改为启用(enable) 2. 开启WSL 系统设置->应用->程序和功能->…...
(未完成)【Spring专题】SringAOP底层原理解析——阶段三(AOP)
目录 前言前置知识代理范式SpringAOP的理解Spring动态代理的实现 课程内容一、动态代理的实现1.1 Cglib动态代理1.2 JDK动态代理1.3 ProxyFactory:Spring对两种代理的封装 二、AOP基础知识AOP基础概念回顾通知Advice的分类Advisor的理解 三、创建代理对象的方式3.1 …...
使用Nodejs创建简单的HTTP服务器,借助内网穿透工具实现公网访问的方法分享
文章目录 前言1.安装Node.js环境2.创建node.js服务3. 访问node.js 服务4.内网穿透4.1 安装配置cpolar内网穿透4.2 创建隧道映射本地端口 5.固定公网地址 前言 Node.js 是能够在服务器端运行 JavaScript 的开放源代码、跨平台运行环境。Node.js 由 OpenJS Foundation࿰…...
使用 OpenTelemetry 构建可观测性 03 - 导出
上一个博文中,我提到如何使用 OpenTelemery 的特定语言 API 来收集遥测数据,包含手动和自动的埋点技术,这很重要!但是,收集遥测数据只是解决方案的第一步。 你需要把遥测数据路由转发到其他地方,同时添加额…...
Pyqt5打开电脑摄像头进行拍照
目录 1、设计UI界面 2、设计逻辑代码,建立连接显示窗口 3、结果 1、设计UI界面 将ui界面转为py文件后获得的逻辑代码为:(文件名为 Camera.py) # -*- coding: utf-8 -*-# Form implementation generated from reading ui file …...
Flowable 7.0.0.M2 版本功能
CMMN 支持批量迁移重复支持案例重新激活支持停止内务处理批处理Http 任务支持 HTTP HEAD and OPTIONS for the Http Tasks移除了 Spring Boot 启动器 flowable-spring-boot-starter-basic - 切换为 flowable-spring-boot-starter-process flowable-spring-boot-starter-rest-ap…...
【golang】关于指针的有限操作
传统意义上来说,指针是一个指向某个确切的内存地址的值。这个内存地址可以是任何数据或代码的起始地址。在Go语言中有几种东西可以代表"指针"。其中最贴切传统意义的当属uintptr类型的了。该类型实际上是一个数值类型,也是Go语言内建的数据类型…...
ProGuard + SpringBoot3 + JDK17
1、pom依赖 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/POM/4.…...
Kafka面试
文章内容转自: 华仔聊技术(Kafka 面试连环炮) 目录 一.初级 1.Kafka核心组件图 2.在 Kafka 中 Zookeeper 作用是什么? 3.生产者有哪些发消息的模式? 4.Kafka 如何合理设置分区数,越多越好吗? Kafka 如何合理设置分区数 分区设置越多越好吗? 5.如何保证 Kafka 中的…...
Amazon CloudFront 部署小指南(六)- Lambda@Edge 基础与诊断
内容简介 本文适用于希望使用 Amazon CloudFront LambdaEdge 提升 Amazon CloudFront 边缘计算能力的用户,旨在帮助您更好的进行 CloudFront LambdaEdge 的开发、调试、测试、部署等工作。 首先我们会对 CloudFront LambdaEdge 做个简单的介绍,然后分七个…...
centos7安装hadoop 单机版
1.解压 (1)将hadoop压缩包复制到/opt/software路径下 (2)解压hadoop到/opt/module目录下 [rootkb135 software]# tar -zxvf hadoop-3.1.3.tar.gz -C /opt/module/ (3)修改hadoop属主和属组 [rootkb135 m…...
村口的人家排放污水,污水浸染了整个村子,怎么办
从前有一个很不错的村子里,村子里有很多户人家,随着生活水平越来越好,房子也修起来了,柏油马路也宽敞了,大家进出村子,都要走那条马路,要不就出不去。 目录 1. 修厕所 2. 村口的日家 3. 告诉…...
算法leetcode|72. 编辑距离(rust重拳出击)
文章目录 72. 编辑距离:样例 1:样例 2:提示: 分析:题解:rust:二维数组(易懂)滚动数组(更加优化的内存空间) go:c:python&a…...
实训笔记8.21
8.21笔记 8.21笔记一、Hive数据仓库技术的基本概念和组成1.1 Hive的组成架构1.1.1 Hive的客户端(1)Hive的命令行客户端 hive命令(2)Hive的JDBC的客户端(Java API)hive的JDBC客户端又有多种使用方式 &#x…...
robust distortion-free watermarks for language models
本文是LLM系列文章,针对《robust distortion-free watermarks for language models》的翻译。 语言模的鲁棒无失真水印 摘要1 引言2 方法和理论分析3 实验结果4 讨论 摘要 我们提出了一种从自回归语言模型中在文本中植入水印的方法,该方法对扰动具有鲁…...
PTS性能测试工具-使用记录
因为PTS使用是要收费的,所以文中会有大量图片记录,为我自己以后工作中,可能会再次使用PTS做个参照,以免时间长,容易忘记~ 目录 一、创建场景 二、填写一个压测节点 1、填写节点基本信息 2、Body / Header填写 …...
【boost网络库从青铜到王者】第六篇:asio网络编程中的socket异步读(接收)写(发送)
文章目录 1、简介2、异步写 void AsyncWriteSomeToSocketErr(const std::string& buffer)3、异步写void AsyncWriteSomeToSocket(const std::string& buffer)4、异步写void AsyncSendToSocket(const std::string& buffer)5、异步读void AsyncReadSomeToSocket(cons…...
django sqlite3操作和manage.py功能介绍
参考链接:https://www.cnblogs.com/csd97/p/8432715.html manage.py 常用命令_python manage.py_追逐&梦想的博客-CSDN博客 python django操作sqlite3_django sqlite_浪子仙迹的博客-CSDN博客...
【SQL语句】SQL编写规范
简介 本文编写原因主要来于XC迁移过程中修改SQL语句时,发现大部分修改均源自于项目SQL编写不规范,以此文档做以总结。 注:此文档覆盖不甚全面,大体只围绕迁移遇到的修改而展开。 正文 1、【字段引号】 列名、表名如无特殊情况…...
后端项目开发:工具类封装(序列化、反射)
1.整合Jackson 根据《阿里巴巴开发规范》,包名使用单数,类名可以使用复数。 所以generic-common创建util包和utils工具类 很多时候我们需要将接收到的json数据转换为对象,或者将对象转为json存储。这时候我们需要编写用于json转换的工具类。…...
软件测试技术分享丨遇到bug怎么分析?
为什么定位问题如此重要? 可以明确一个问题是不是真的“bug” 很多时候,我们找到了问题的原因,结果发现这根本不是bug。原因明确,误报就会降低 多个系统交互,可以明确指出是哪个系统的缺陷,防止“踢皮球…...
LeetCode无重复字符的最长子串
给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。 示例 1: 输入: s “abcabcbb” 输出: 3 解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。 示例 2: 输入: s “bbbbb” 输出: 1 解释: 因为无重复字符的最长子串是 “…...
wordpress拿站/关键词权重如何打造
功能分析PFMEA系列之三前两两篇文章已经就FMEA7步法的结构分析和功能分析给大家进行了说明,今天我们一起来看一下功能分析新版PFMEA培训之第一步计划和确定项目新版PFMEA培训之第二步结构分析功能 我们先了解下什么是功能比如灯泡的功能是什么呢?定义来了…...
xshell如何做网站/竞价排名服务
安装R 这里使用的R是R3.6.3,后面安装的R函数包的版本要求是R3.4及以上。 软件包获取 进入R官网https://cran.r-project.org/src/base/R-3/ 解压缩 tar -zxvf R-3.6.3.tar.gz 尝试安装 cd R-3.6.3 ./configure --prefix/usr/local/R3_6_3可以看到缺少软件&…...
武汉网站程序开发公司/查域名ip地址查询
运行: 一、$ sudo apt-get install libqt4-dev libqt4-debug libqt4-gui libqt4-sql qt4-dev-tools qt4-doc qt4-designer qt4-qtconfig 上面列出的是qt配置环境所必须的软件包,比如qt4-dev-tools 包含了Qt Assistant及Qt Linguist等工具,因此…...
网站建设banner/web网页制作成品
SQL基本操作 将SQL的基本操作根据操作对象进行分类 ,分为三类: 库操作, 表操作(字段), 数据操作 一、库操作:对数据库的增删改查 1、新增数据库 Create database 数据库名字 [库选项]; 库选项: 用来约束数据库, 分为两个选项 字符集设定: charset/character set 具体…...
旅游景区门户网站建设规划方案/刷推广链接
原创文章,转载请注明出处并保留地址。原文地址:http://www.cnblogs.com/muge10/p/6723894.html 先放上最后的效果,这是点击图片以前: 这是点击图片以后: 非常清晰,一目了然,就算是小白用户也明白…...
哪里有网站建设服务/企业seo服务
MD5是message-digest algorithm 5(信息-摘要算法)的缩写, 被广泛用于加密和解密技术上,它可以说是文件的“数字指纹”。任何 一个文件,无论是可执行程序、图像文件、临时文件或者其他任何类型的文件,也不管…...