Java學習筆記四(繼承)

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