Java基础(六)——继承

个人简介

👀个人主页: 前端杂货铺
开源项目: rich-vue3 (基于 Vue3 + TS + Pinia + Element Plus + Spring全家桶 + MySQL)
🙋‍♂️学习方向: 主攻前端方向,正逐渐往全干发展
📃个人状态: 研发工程师,现效力于中国工业软件事业
🚀人生格言: 积跬步至千里,积小流成江海
🥇推荐学习:🍖开源 rich-vue3 🍍前端面试宝典 🍉Vue2 🍋Vue3 🍓Vue2/3项目实战 🥝Node.js实战 🍒Three.js

🌕个人推广:每篇文章最下方都有加入方式,旨在交流学习&资源分享,快加入进来吧

内容参考链接
Java基础(一)Hello World,8种数据类型,键盘录入
Java基础(二)数组,方法,方法重载
Java基础(三)类和对象、构造方法
Java基础(四)字符串、StringBuffer、StringBuilder、StringJoiner
Java基础(四)ArrayList

文章目录

    • 前言
    • 继承
      • Java 继承的特点
      • 方法重写
      • 继承中构造方法的访问特点
    • static
    • 总结

前言

大家好,这里是前端杂货铺。

本篇文章,我们主要学习 Java 中继承,并顺带认识一下 static。


继承

继承,可以让类和类之间产生子父的关系。我们可以把多个子类中重复的代码抽取到父类中,子类可以直接使用,减少代码冗余,提高代码复用性。

子类可以得到父类的属性和行为,子类可以使用。

子类可以在父类的基础上新增其他功能,使得子类更强大。

public class 子类 extends 父类 {}

Java 继承的特点

  • Java 只支持单继承,不支持多继承,但支持多层继承(A 继承父类 B,B 继承父类 C…)
  • Java 中所有的类都直接或间接继承于 Object 类
  • 子类只能访问父类中的非私有成员
  • 子类中 不能继承 父类中 非私有和私有的构造方法
  • 子类中 能继承 父类中 非私有和私有的成员变量(但私有不可用)
  • 子类中 能继承 父类中 虚方法表(非private、非static、非final修饰)中的成员方法,其余不能继承
  • 继承中成员变量访问特点:就近原则:先在局部位置找,本类成员位置找,父类成员位置找,逐级往上

方法重写

几个注意事项:

  • 重写方法的名称、形参列表必须与父类中的一致
  • 子类重写父类方法时,访问权限子类必须大于等于父类(空着不写 < protected < public)
  • 子类重写父类方法时,返回值类型子类必须小于等于父类
  • 只有被添加到虚方法表中的方法才能被重写
package com.javabasic.define;public class Test {public static void main(String[] args) {Student student = new Student();student.lunch();}
}class Person {public void eat() {System.out.println("父类-吃馒头");}public void drink() {System.out.println("父类-喝开水");}
}class Student extends Person {public void lunch() {this.eat();this.drink();super.eat();super.drink();}@Overridepublic void eat() {System.out.println("子类-吃辣条");}@Overridepublic void drink() {System.out.println("子类-喝饮料");}
}

在这里插入图片描述


继承中构造方法的访问特点

  • 子类不能继承父类的构造方法,但是可以通过super调用
  • 子类构造方法的第一行,有个默认的super()
  • 默认先访问父类中无参的构造方法,再执行自己
  • 如果想要调用父类的有参构造方法,必须手动书写

Person.java

package com.javabasic.define;public class Person {String name;int age;public Person() {System.out.println("父类的无参构造");}public Person(String name, int age) {this.name = name;this.age = age;}
}

Student.java

package com.javabasic.define;public class Student extends Person {public Student() {super();System.out.println("子类的无参构造");}public Student(String name, int age) {super(name, age);}
}

Test.java

package com.javabasic.define;public class Test {public static void main(String[] args) {// 调用无参构造,先走父,再走子Student student = new Student();// 间接调用父类的有参构造Student student2 = new Student("张三", 22);System.out.println(student2.name + ", " + student2.age);}
}

在这里插入图片描述


static

static 表示静态,是 Java 中的一个修饰符,可以修饰成员方法,成员变量。

被 static 修饰的成员变量,叫做静态变量。

  • 被该类所有对象共享
  • 不属于对象,属于类
  • 随着类的加载而加载,优先于对象存在

Student.java

package com.javabasic.define;public class Student {private String name;private int age;public static String teacherName;public void show() {System.out.println(name + " " + age + " " + teacherName);}public Student() {}public Student(String name, int age) {this.name = name;this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}
}

Test.java

package com.javabasic.define;public class Test {public static void main(String[] args) {Student.teacherName = "xx老师";Student student = new Student("前端杂货铺", 20);student.show();}
}

在这里插入图片描述


被 static 修饰的成员方法,叫做静态方法。

  • 多用在测试类和工具类中
  • Javabean 类中很少会用
  • 静态方法中没有 this 关键字
  • 静态方法只能访问静态
  • 非静态方法可以访问非静态方法和静态方法

下面,我们创建一个工具类 ArrayUtil.java,里面均为静态方法,用于处理一些数组数据。

ArrayUtil.java

package com.javabasic.define;public class ArrayUtil {private ArrayUtil() {}public static String printArr(int[] arr) {StringBuilder sb = new StringBuilder();sb.append("[");for (int i = 0; i < arr.length; i++) {if (i == arr.length - 1) {sb.append(arr[i]);} else {sb.append(arr[i]).append(", ");}}sb.append("]");return sb.toString();}public static double getAverage(double[] arr) {double sum = 0;for (int i = 0; i < arr.length; i++) {sum += arr[i];}return sum / arr.length;}
}

Test.java

package com.javabasic.define;public class Test {public static void main(String[] args) {int[] arr1 = {1, 2, 3, 4, 5};String str = ArrayUtil.printArr(arr1);System.out.println(str);double[] scores = {1.0, 2.0, 3.0, 4.0, 5.0};double average = ArrayUtil.getAverage(scores);System.out.println(average);}
}

在这里插入图片描述


总结

本篇文章,我们学习了继承的相关内容,并认识了 static 的特性及使用场景…

好啦,本篇文章到这里就要和大家说再见啦,祝你这篇文章阅读愉快,你下篇文章的阅读愉快留着我下篇文章再祝!


参考资料:

  1. Java 基础(bilibili-黑马程序员)
  2. 菜鸟教程–Java

在这里插入图片描述


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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Web】

1、配仓库 [rootlocalhost yum.repos.d]# vi rpm.repo ##本地仓库标准写法 [baseos] namemiaoshubaseos baseurl/mnt/BaseOS gpgcheck0 [appstream] namemiaoshuappstream baseurlfile:///mnt/AppStream gpgcheck0 2、挂载 [rootlocalhost ~]mount /dev/sr0 /mnt mount: /m…

QT操作各类数据库用法详解

文章目录 创建内存SQLITE数据库QSqlTableModel操作数据库表连接国产数据库多线程数据处理不指定数据库名打开数据库QT对各种数据库的支持情况处理数据库表名QT连接各种数据库Qt提供了一个名为QtSQL模块的强大组件, 使得在Qt应用程序中连接和操作多种类型的数据库变得相对简单。…

Vulnhub-Os-hackNos-1(包含靶机获取不了IP地址)

https://download.vulnhub.com/hacknos/Os-hackNos-1.ova #靶机下载地址 题目&#xff1a;要找到两个flag user.txt root.txt 文件打开 改为NAT vuln-hub-OS-HACKNOS-1靶机检测不到IP地址 重启靶机 按住shift 按下键盘字母"E"键 将图中ro修改成…

Github 2024-07-06 开源项目日报 Top10

根据Github Trendings的统计,今日(2024-07-06统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Python项目3TypeScript项目2Rust项目2非开发语言项目1C++项目1QML项目1MDX项目1JavaScript项目1Assembly项目1免费编程书籍和学习资源清单 创建…

JS 四舍五入使用整理

一、Number.toFixed() 把数字转换为字符串,结果的小数点后有指定位数的数字,重点返回的数据类型为字符串 toFixed() 方法将一个浮点数转换为指定小数位数的字符串表示,如果小数位数高于数字,则使用 0 来填充。 toFixed() 方法可把 Number 四舍五入为指定小数位数的数字。…

Vue 3集成krpano 全景图展示

Vue 3集成krpano 全景图展示 星光云全景系统源码 VR全景体验地址 星光云全景VR系统 将全景krpano静态资源文件vtour放入vue项目中 导入vue之前需要自己制作一个全景图 需要借助官方工具进行制作 工具下载地址&#xff1a;krpano工具下载地址 注意事项&#xff1a;vuecli…

Hook 实现 Windows 系统热键屏蔽(二)

目录 前言 一、介绍用户账户控制&#xff08;UAC&#xff09; 1.1 什么是 UAC &#xff1f; 2.2 UAC 运行机制的概述 2.3 分析 UAC 提权参数 二、 NdrAsyncServerCall 函数的分析 2.1 函数声明的解析 2.2 对 Winlogon 的逆向 2.3 对 rpcrt4 的静态分析 2.4 对 rpcrt4…

YOLOv8_obb数据集可视化[旋转目标检测实践篇]

先贴代码,周末再补充解析。 这个篇章主要是对标注好的标签进行可视化,虽然比较简单,但是可以从可视化代码中学习到YOLOv8是如何对标签进行解析的。 import cv2 import numpy as np import os import randomdef read_obb_labels(label_file_path):with open(label_file_path,…

探索 IPython 的环境感知能力:详解 %env 命令的妙用

探索 IPython 的环境感知能力&#xff1a;详解 %env 命令的妙用 在数据科学和编程的海洋中&#xff0c;环境变量扮演着至关重要的角色。IPython&#xff0c;这一强大的交互式计算工具&#xff0c;通过其内置的魔术命令 %env&#xff0c;为我们提供了与环境变量交互的强大能力。…

git基础指令总结持续更新之git分支简介和基本操作,解决合并和冲突,回退和rebase(变基),分支命名和分支管理,学习笔记分享

git 分支简介和基本操作 Git 分支是 Git 的核心特性之一&#xff0c;它允许开发者在不同的开发线上工作&#xff0c;而不会影响主代码库。以下是 Git 分支的简介和一些基本操作&#xff1a; 分支的概念&#xff1a; 分支是 Git 中的一个独立开发线。创建分支时&#xff0c;G…

rtt设备驱动框架学习——内核对象基类object

内核对象基类object 这个基类是内核所有对象的基类 在rt-thread/include/rtdef.h文件里有对内核对象基类object的定义 /*** Base structure of Kernel object*/ struct rt_object {char name[RT_NAME_MAX]; /**< name of kernel object */rt…

清新简约之美,开源个人博客:Jekyll Theme Chirpy

Jekyll Theme Chirpy&#xff1a;简约不简单&#xff0c;Chirpy 让你的博客焕发新意- 精选真开源&#xff0c;释放新价值。 概览 Jekyll Theme Chirpy 是为Jekyll静态网站生成器设计的现代主题&#xff0c;以其清新、简约的设计风格和用户友好的交互体验受到开发者和博客作者的…

为企业知识库选模型?全球AI大模型知识库RAG场景基准测试排名

大语言模型常见基准测试 大家对于AI模型理解和推理能力的的基准测试一定非常熟悉了&#xff0c;比如MMLU&#xff08;大规模多任务语言理解&#xff09;、GPQA&#xff08;研究生级别知识问答&#xff09;、GSMSK&#xff08;研究生数学知识考察&#xff09;、MATH&#xff08…

Zabbix监控软件

目录 一、什么是Zabbix 二、zabbix监控原理 三、zabbix 安装步骤 一、什么是Zabbix ●zabbix 是一个基于 Web 界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案。 ●zabbix 能监视各种网络参数&#xff0c;保证服务器系统的安全运营&#xff1b;并提供灵活的…

python读取写入txt文本文件

读取 txt 文件 def read_txt_file(file_path):"""读取文本文件的内容:param file_path: 文本文件的路径:return: 文件内容"""try:with open(file_path, r, encodingutf-8) as file:content file.read()return contentexcept FileNotFoundError…

Swagger的原理及应用详解(十)

本系列文章简介&#xff1a; 在当今快速发展的软件开发领域&#xff0c;特别是随着微服务架构和前后端分离开发模式的普及&#xff0c;API&#xff08;Application Programming Interface&#xff0c;应用程序编程接口&#xff09;的设计与管理变得愈发重要。一个清晰、准确且易…

【多线程】进程与线程

&#x1f3c0;&#x1f3c0;&#x1f3c0;来都来了&#xff0c;不妨点个关注&#xff01; &#x1f3a7;&#x1f3a7;&#x1f3a7;博客主页&#xff1a;欢迎各位大佬! 文章目录 1. 操作系统1.1 什么是操作系统1.2 操作系统主要的功能 2. 进程2.1 什么是进程2.2 通过PCB描述一…

jEasyUI 创建菜单按钮

jEasyUI 创建菜单按钮 jEasyUI(jQuery EasyUI)是一个基于jQuery的用户界面插件集合,它为用户提供了一系列的UI组件,如菜单、按钮、表格等,以简化Web页面的开发过程。在本文中,我们将重点介绍如何使用jEasyUI创建菜单按钮。 1. 环境准备 在开始之前,请确保您的开发环境…

使用Python绘制甘特图

使用Python绘制甘特图 甘特图效果代码 甘特图 甘特图是一种项目管理工具&#xff0c;用于展示项目进度和任务安排。它通过条状图形表示各任务的起止时间&#xff0c;便于直观地查看项目的各个任务的进度和相互关系。 效果 [外链图片转存失败,源站可能有防盗链机制,建议将图片…

(void) (_x == _y)的作用

在阅读宋宝华的《Linux设备驱动开发详解》一书时&#xff0c;看到下面这段代码&#xff1a; #define min(x, y) ({ \ const typeof(x) _x (x); \ const typeof(y) -y (y); \ (void) (&_x &_y); \ _x < _y ? _x : _y; }) 这段代码可以理解如…