1 继承

继承的实现:public class 子类 extends 父类 {… }

注释:子类可直接使用,父类(保护,公开)的属性和方法

优点:减少重复代码,缺点:只能单继承

// 父类
public class Test {private String str1; //私有String str2;         //默认protected String str3;// 保护public String str4;    //公开private void fn1() {} //私有void fn2() {}         //默认protected void fn3() {}// 保护public void fn4() {}   //公开
}
// 子类
public class SubTest extends Test {public void subFn1() {String t3 = str3;String t4 = str4;fn3();fn4();}
}

2 子类实例化

子类构造器默认先调用父类无参构造器(可省略),父类没有无参构造器(必须先显示调用有参构造器)

public class 子类 extends 父类 {public 子类() {[super();] // 可省略子类处理…}
}

3 方法重写

注释:子类定义了与父类相同的方法(方法重写)

// 父类
public class Test {public String name = "张三";public void doTest() {System.out.println(name);}
}

测试类1:子类未重写方法,调父类方法使用的是父类属性(不会输出子类同名属性)

// 子类
public class SubTest1 extends Test {public String name = "李四";
}
public class Main {public static void main(String[] args) {SubTest1 s = new SubTest1(); System.out.println(s.name); //输出 李四s.doTest();  //输出 张三(子类没有该方法,父类该方法输出父类名字)}
}

测试类2:子类重写属性方法后,使用的是子类的属性

//子类
public class SubTest2 extends Test {public String name = "李四";public void doTest() {System.out.println("son:"+name);} 
}
public class Main {public static void main(String[] args) {SubTest2 s = new SubTest2();System.out.println(s.name); // 输出 李四s.doTest();// 输出 son:李四}
}

测试类3:子类对象定义为父类类型,输出父类属性,调用的是子类方法

//子类
public class SubTest2 extends Test {public String name = "李四";public void doTest() {System.out.println("son:"+name);} 
}
public class Main {public static void main(String[] args) {Test s = new SubTest2();System.out.println(s.name);  // 输出 张三s.doTest();   // 输出 son:李四}
}

测试类4:子类对象强转父类类型,输出父类属性,调用的是子类方法

//子类
public class SubTest2 extends Test {public String name = "李四";public void doTest() {System.out.println("son:"+name);} 
}
public class Main {public static void main(String[] args) {SubTest2 s = new SubTest2();Test ss = (Test)s;System.out.println(ss.name);  // 输出 张三ss.doTest();  // 输出 son:李四}
}

4 方法重载

方法名(相同)参数(个数或类型)(不同)与返回值无关

public class Test {public String fn(String str){ }// 重载1,参数类型不同public String fn(int num) {}// 重载2,参数个数不同public String fn(int age, int num) {}}

5 super关键字

注释:只可在子类内部使用,使子类可以使用父类原生方法与属性

(1) 调用父类构造器:super([参数…]);

(2) 调用父类属性:super.属性; // 获取与更改父类的属性,不影响子类同名属性

(3) 调用父类方法:super.方法(); // 调用父类的方法,与子类是否重写无关

// 父类
public class Test {private String str1 = "私有";String str2 = "默认";protected String str3 = "保护";public String str4 = "公开";private String fn1() { return str1; }String fn2() { return str2; }protected String fn3() { return str3; }public String fn4() { return str4; }
}
// 子类
public class SubTest extends Test {protected String str3 = "保护(son)";public String str4 = "公开(son)";protected String fn3() { return str3; }public String fn4() { return str4; }// 调用父类构造器(默认不写也调用)public SubTest() {super();}// 调用父类方法public void test() {System.out.println(super.str3);  // 输出 父类 保护System.out.println(super.str4);  // 输出 父类 公开System.out.println(super.fn3());  // 输出 父类 保护System.out.println(super.fn4());  // 输出 父类 公开}public void testSub() {System.out.println(str3);  // 输出 子类 保护(son)System.out.println(str4);  // 输出 子类 公开(son)System.out.println(fn3());  // 输出 子类 保护(son)System.out.println(fn4());  // 输出 子类 公开(son)}
}

6 代码执行顺序

6.1 静态方法

// 初次调用:类名.静态方法() 

1.类加载(静态变量初期化,只执行1次)

2.类加载(静态代码块,只执行1次)

3.静态方法执行

// 之后再调用:类名.静态方法() // 只重复执行3

3.静态方法执行

6.2 实例化对象

// 初次实例化:new 对象()

1.类加载(静态变量初期化,只执行1次)

2.类加载(静态代码块,只执行1次)

3.代码块(执行)

4.构造器(执行)

// 之后再实例化:new 对象()  // 只重复执行3,4

3.代码块(执行)

4.构造器(执行)

6.3 子类静态方法

// 初次调用:子类.静态方法() 

1.父类加载(静态变量初期化,只执行1次)

2.父类加载(静态代码块,只执行1次)

3.子类加载(静态变量初期化,只执行1次)

4.子类加载(静态代码块,只执行1次)

5.子类静态方法(执行)

// 之后再调用:子类.静态方法()  // 只重复执行5

5.子类静态方法(执行)

6.4 子类实例化对象

// 初次调用:new 子类对象() 

1.父类加载(静态变量初期化,只执行1次)

2.父类加载(静态代码块,只执行1次)

3.子类加载(静态变量初期化,只执行1次)

4.子类加载(静态代码块,只执行1次)

5.父类代码块(执行)

6.父类构造器(执行)

7.子类代码块(执行)

8.子类构造器(执行)

// 之后再调用:new 子类对象()  // 只重复执行5,6,7,8

5.父类代码块(执行)

6.父类构造器(执行)

7.子类代码块(执行)

8.子类构造器(执行)

总结:1 只有初次类加载初始化静态变量,执行静态代码块。2 父类(变量,代码块,构造器)优先于子类执行。3 代码块优先于构造器执行。

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

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

相关文章

NAT技术:SNAT与DNAT区别详解

1. 什么是NAT? 定义:NAT 是一种网络技术,用于在私有网络(如家庭或企业局域网) 与 公共网络(如互联网) 之间转换IP地址。它允许使用私有IP地址的设备通过一个(或多个)公共…

java语言中,list<String>转成字符串,逗号分割;List<Integer>转字符串,逗号分割

java语言中&#xff0c;list<String 转成字符串&#xff0c;逗号分割 在 Java 中&#xff0c;将 List<String> 转成逗号分割的字符串有多种方法&#xff1a; 使用 String.join 方法 String.join 是 Java 8 引入的一个静态方法&#xff0c;它可以方便地将集合中的元素用…

NineData云原生智能数据管理平台新功能发布|2025年8月版

本月发布 11 项更新&#xff0c;其中重点发布 5项、功能优化 6 项。重点发布数据库 DevOps - SQL 窗口支持 PolarDB 系列SQL 窗口新增支持 PolarDB PostgreSQL 与 PolarDB Oracle 数据源&#xff0c;扩展云原生数据库管理能力。新增 AWS 数据源支持新增支持 AWS Aurora Postgre…

【ARDUINO】通过ESP8266连接WIFI,启动TCP,接受TCP客户端指令【测试中】

通过ESP8266连接WIFI&#xff0c;启动TCP&#xff0c;接受TCP客户端指令**记录**2025年9月8日11:20:372025年9月9日08:45:342025年9月11日21:40:22**代码**记录 2025年9月8日11:20:37 【测试情况】 代码可以跑到正确连接WIFI&#xff0c;也能获得IP&#xff0c;但是启动TCP服…

(网络原理)核心知识回顾 网络核心原理 get和post的理解 解析http 加密+请求和响应的一些关键字 Cookie和session 对密钥的理解

目录 核心知识回顾 网络核心原理 get和post的理解 解析http 加密请求和响应的一些关键字 Cookie和session 对密钥的理解 核心知识回顾 网络编程---socket api UDP DatagramSocket DatagramPacket TCP ServerSocket Socket 1.读写数据通过Socket,通过Socket内置的 lnpu…

前端框架对比分析:离线PWA + Cloudflare Workers部署

目录 概述 框架对比表格 详细分析 1. Astro ⭐⭐⭐⭐⭐ **强烈推荐** 2. Next.js ⭐⭐⭐⭐ **推荐** 3. Remix (现React Router) ⭐⭐⭐⭐⭐ **强烈推荐** 4. SvelteKit ⭐⭐⭐⭐ **推荐** 5. Nuxt.js ⭐⭐⭐ **一般推荐** 6. Vite + React ⭐⭐⭐ **基础选择** 推荐方案 🏆 …

9-10关于JS初学产生的问题

1.页面添加加载完成事件监听&#xff0c;页面加载完成后&#xff0c;执行页面初始化方法/函数; 这是什么意思 这句话描述的是前端开发中一种常见的操作&#xff1a;等待页面完全加载完成后&#xff0c;再执行特定的初始化代码。 简单来说&#xff0c;就是要确保页面上的所有元素…

项目中遇到pom文件里使用systemPath的例子记录

项目中遇到pom文件里使用systemPath&#xff0c;很少见&#xff0c;问了下豆包&#xff0c;记录下结果。在 Maven 的 pom.xml 中&#xff0c;<systemPath> 是 <dependency> 标签内的一个可选配置&#xff0c;用于手动指定本地系统中某个依赖包&#xff08;通常是 J…

10、向量与矩阵基础 - 深度学习的数学语言

学习目标:建立向量和矩阵的几何直观理解,掌握线性代数的核心概念,培养空间思维能力,为手搓大模型奠定扎实的数学基础 想象一下,当你使用GPT进行对话时,每个词汇都被转换成高维向量,整个对话历史变成一个巨大的矩阵。模型的"理解"过程,本质上就是在这个高维空…

【Python Tkinter】图形用户界面(GUI)开发及打包EXE指南

【Python Tkinter】图形用户界面&#xff08;GUI&#xff09;开发及打包EXE指南一、关于 Python Tkinter二、密码生成器示例2.1 使用Python添加图形用户界面&#xff08;GUI&#xff09;2.2 使用工具PyInstaller将应用打包成exe文件三、总结一、关于 Python Tkinter Python Tk…

【设计模式】【观察者模式】实例

一对多的统一监听 —— 这就是 观察者模式&#xff08;Observer Pattern&#xff09; 的经典应用场景。也就是说&#xff1a;一个事件源&#xff08;Subject&#xff09; → 可以注册多个监听器&#xff08;Observers&#xff09;&#xff1b;当事件发生时&#xff0c;一次性通…

C#测试调用OpenXml操作word文档的基本用法

OpenXML SDK是微软为高效处理Office文档&#xff08;如Word、Excel&#xff09;而开发的开源.NET库,它直接操作文档内部的XML结构&#xff0c;无需安装Office软件即可实现文档的创建、读取和编辑,常用于服务器端批量生成报表、自动化文档处理等场景&#xff0c;轻量且跨平台。本…

照度传感器考虑笔记

您好&#xff01;很高兴为您解答关于照度计传感器和设计的问题。这是一个非常专业且实际的话题。 一、照度计常用的照度传感器类型 照度计的核心是光电探测器&#xff0c;其工作原理是将光信号转换为电信号。目前主流的照度传感器都属于硅光电二极管&#xff08;Si Photodiode&…

C# Web API Mapster基本使用

安装包&#xff1a;Mapster1.注册MyRegister.Scan(); // 全局配置 //builder.Services.AddMapster(); // 需要安装Mapster.DependencyInjection包 builder.Services.AddScoped<IMapper,Mapper>();2.配置&#xff08;可不进行配置直接使用也行&#xff09;public class My…

<数据集>无人机航拍人员搜救识别数据集<目标检测>

数据集下载链接https://download.csdn.net/download/qq_53332949/91899456数据集格式&#xff1a;VOCYOLO格式 图片数量&#xff1a;5755张 标注数量(xml文件个数)&#xff1a;5755 标注数量(txt文件个数)&#xff1a;5755 标注类别数&#xff1a;1 标注类别名称&#xff…

STM32 开发(三十三)STM32F103 片内资源 —— 直接存储 DMA 实战 编码详解

👈《上一篇》  🏡《主目录》  👉《下一篇》 文章目录 一、基础知识点 二、开发环境 三、STM32CubeMX相关配置 四、Vscode 代码讲解 ADC -DMA 采集温度值 代码解析 DAC -DMA 输出 1KHZ 正弦波 代码解析 五、结果演示 ADC -DMA 采集温度值 结果演示 DAC -DMA 输出 1KHZ 正…

Ip 地址,子网掩码

1. 什么是 IP 地址&#xff1f;IP 地址是互联网上设备的唯一标识&#xff0c;类似于现实中的“门牌号”&#xff0c;用于设备之间的通信。ABC类IP内网地址的范围如下&#xff1a;A类地址&#xff1a;范围是 10.0.0.0 到 10.255.255.255&#xff0c;用于大型网络&#xff0c;网络…

软件工程领域内容运营的翻译策略:打破语言边界

软件工程领域内容运营的翻译策略:打破语言边界 关键词:软件工程、内容运营、翻译策略、技术本地化、术语管理、跨文化沟通、机器翻译 摘要:在全球化协作日益紧密的今天,软件工程领域的内容(如技术文档、API手册、开发者博客、开源社区指南等)早已突破单一语言限制,成为连…

元宇宙与金融创新:虚实融合下的金融服务新形态

1 元宇宙重构金融核心服务场景1.1 零售金融场景&#xff1a;从 “线下网点 线上 APP” 到 “沉浸式虚拟金融空间”传统零售金融服务受限于物理网点或二维 APP&#xff0c;交互性与体验感不足&#xff0c;元宇宙通过 “3D 虚拟金融空间 数字分身交互”&#xff0c;打造 “身临…

信奥赛csp初赛高频考点真题分类解析之:基本运算

信奥赛csp初赛高频考点真题分类解析之:基本运算 题目1: 答案:C 题解:R进制转换为十进制:按权展开 3 \times 8 1 ^1