繼 承

為什么要有繼承,繼承的作用?

繼承(inheritance)機制:是面向對象程序設計使代碼可以復用的最重要的手段,它允許程序員在保持原有類特性的基礎上進行擴展,增加新功能,這樣產生新的類,稱派生類。

作用:進行共性抽取,實現代碼的復用

//代碼一
public class Cat {public String name;public int age;public void meow(){System.out.println(this.name + "喵喵叫");}
}
//代碼二
public class Dog {public String name;public int age;public void bark(){System.out.println(this.name + "汪汪叫");}
}

對上述代碼一和代碼二,我們不難發現他們有著共同字段 name 和 age,因此可以將兩段代碼的共性抽取出來,放到Animal類中,如下

public class Animal {public String name;public int age;
}

這樣就將共性抽取了出來,如果以后還有別的動物需定義一個類,就可以繼承Animal類,從而達到代碼的復用。那么怎么寫繼承呢?請看下文。

語法

表示類之間的繼承關系,用 extends 關鍵字。

修飾符 class 子類/派生類 extends 父類/基類/超類{
}//例
public class Animal {public String name;public int age;
}public class Cat extends Animal{//將Animal類字段name和age繼承過來且有自己的成員public void meow(){System.out.println(this.name + "喵喵叫");}
}
  1. 子類會將父類中的成員變量或成員方法繼承到子類中
  2. 子類繼承父類后,需添加自己特有的成員,體現出與父類不同,否則沒必要繼承

子類訪問父類成員

  1. 子類訪問父類成員變量
    當父類和子類擁有同名的成員變量時,優先訪問子類成員變量,若要在子類中訪問與父類同名的成員變量,則需借助super關鍵字==(super.成員變量)==
  2. 當父類和子類擁有同名成員方法時,優先訪問子類成員方法,若要在子類中訪問與父類同名的成員方法,則需借助super(super.成員方法

子類構造方法

子類對象構造時 ,需先調用基類構造方法,來幫助基類成員方法初始化,然后執行子類構造方法

public class Animal {public String name;public int age;public Animal(String name,int age){this.name = name;this.age = age;}
}public class Dog extends Animal{public Dog(String name,int age){super(name,age);//用super(參數列表名)來調用父類構造方法,幫助父類成員進行初始化System.out.println("==構造方法執行==");}public void bark(){System.out.println(this.name + "汪汪叫");}
}public class Test {public static void main(String[] args) {Dog dog = new Dog("dog",2);}
}

在這里插入圖片描述

上述代碼中,Dog類這個子類中調用了構造方法(子類構造方法),那么就需要先調用父類的構造方法(用super(參數列表)),也就是Animal類的構造方法來幫助Animal類的成員初始化,然后再繼續執行子類構造方法,打印出構造方法執行。

注意:構造方法中 super(參數列表)或 this(方法名)都必須放在構造方法中的第一行,且不能在靜態方法中使用

如果父類沒有定義構造方法或者定義了無參的構造方法,那么子類構造方法第一行會有隱藏的super()調用(子類構造方法執行前會先調用父類的構造方法【用super()調用】,如果父類沒有顯示定義構造方法,則Java會提供默認的不帶參數的構造方法)

代碼塊執行順序

  1. 靜態代碼塊先執行且只執行一次,在類加載階段執行
  2. 當有對象創建時,執行實例代碼塊,后執行構造方法

當有父類和子類時,先執行父類和子類的靜態代碼塊,再執行父類的實例代碼塊和構造方法,再執行子類的實例代碼塊和構造方法,且如果是第二次實例化子類對象時,父類和子類的靜態代碼塊不會再執行(靜態代碼塊只執行一次)

//父類
public class Father {public String name;public int age;static {System.out.println("父類靜態代碼塊");}{System.out.println("父類實例代碼塊");}public Father(String name,int age){this.name = name;this.age = age;System.out.println("父類構造方法");}
}//子類
public class Son extends Father{static {System.out.println("子類靜態代碼塊");}{System.out.println("子類實例代碼塊");}public Son(String name,int age){super(name,age);System.out.println("子類構造方法");}
}//測試類
public class Test {public static void main(String[] args) {Son son = new Son("dog",3);System.out.println("===========================");//分割線Son son2 = new Son("cat",2);}}

在這里插入圖片描述

有上述代碼和運行結果可知上文所說的執行順序以及靜態代碼塊只執行一次

繼承方式

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/41942.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/41942.shtml
英文地址,請注明出處:http://en.pswp.cn/web/41942.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【人工智能】—基于成都市各區(市)縣租房價格預測建模研究

引言 隨著城市化進程的加速,人口流動日益頻繁,租房市場作為城市生活的重要組成部分,其價格波動對居民生活質量和城市經濟發展具有顯著影響。成都市,作為中國西部地區的經濟、文化、交通和科技中心,近年來吸引了大量人…

為什么獨立站需要高質量的GPB外鏈?

獨立站需要高質量的GPB外鏈,主要是因為它們能顯著提升網站的可信度和可見性。高質量的外鏈相當于得到其他權威網站的認可和推薦,這會讓搜索引擎認為你的內容有價值,從而提升你的搜索排名。試想一下,當其他有影響力的網站愿意鏈接到…

非阻塞式 I/O 模型 【NIO】補充內容

NIO是一種同步非阻塞IO, 基于Reactor模型來實現的。其實相當于就是一個線程處理大量的客戶端的請求,通過一個線程輪詢大量的channel,每次就獲取一批有事件的channel,然后對每個請求啟動一個線程處理即可。這里的核心就是非阻塞,就…

請求接口在控制臺報cors跨域問題

我的問題是:BASE_URL沒有和本地IP設置一致 剛開始:(這個不是我本地電腦的地址) 所以我要把:這個地址改為我本地電腦的ip(http://192.168.2.50:8087) BASE_URL: http://localhost:8087/api/ 或…

單位電腦文檔怎么加密?哪種方法最有效?

單位電腦文檔的加密是保障信息安全的重要措施之一,它可以防止未經授權的訪問和數據泄露。 選擇最佳的加密方法取決于您的具體需求,包括文檔的敏感程度、加密的便捷性、成本、以及是否需要跨平臺兼容性。下面是幾種常見的加密方法及其優缺點,…

【SpringBoot3】結合 gRpc 實現遠程服務調用

一、gRPC概念介紹 gRPC(Google Remote Procedure Call,Google遠程過程調用)是一個現代開源高性能遠程過程調用(RPC)框架,可以在任何環境中運行。它由Google開發,旨在幫助開發人員更輕松地構建分布式應用,特…

昇思學習打卡-8-FCN圖像語義分割

目錄 FCN介紹FCN所用的技術訓練數據的可視化模型訓練模型推理FCN的優點和不足優點不足 FCN介紹 FCN主要用于圖像分割領域,是一種端到端的分割方法,是深度學習應用在圖像語義分割的開山之作。通過進行像素級的預測直接得出與原圖大小相等的label map。因…

clean code-代碼整潔之道 閱讀筆記(第十六章)

第十六章 重構SerialDate 16.1 首先,讓它能工作 利用SerialDateTests來完整的理解和重構SerialDate用Clover來檢查單元測試覆蓋了哪些代碼,效果不行重新編寫自己的單元測試經過簡單的修改,讓測試能夠通過 16.2 讓它做對 全過程&#xff1…

若依微服務初始化搭建教程

文章目錄 🥝從Gitee拉取代碼🍄初始化項目配置配置項目maven配置項目JDKmaven - clean - install 🍒數據源配置創建config / seata數據庫創建ry-cloud數據源導入ry-cloud數據 🍰啟動Nacos下載Nacos修改Nacos配置雙擊startup.cmd啟動…

梧桐數據庫:查詢優化器是提升數據庫性能的關鍵技術

查詢優化器是數據庫管理系統中的核心組件之一,它的主要作用是在執行查詢語句之前,選擇最優的執行計劃,以提高查詢性能。 查詢優化器的基本原理 查詢優化器的主要目標是找到一個執行代價最小的查詢執行計劃。它通過對查詢語句進行語法分析、…

GraphRAG:AI的全局文本理解革新

前言 在人工智能領域,處理和理解大量文本數據始終是一個挑戰。隨著大型語言模型(LLMs)的出現,自動化地進行復雜的語義理解和文本摘要變得可能。檢索增強生成(RAG)方法因其能有效結合檢索與生成技術&#x…

C++基礎語法之重載引用和命名空間等

1.C關鍵字 c的關鍵字比我們的c語言的關鍵字多,c包容C語言并對C語言進行了補充,但是我們對關鍵字的學習是在我們后面逐漸學習的。這里我們的只是提供一個表格對齊了解一下。 2.命名空間 我們c出現了命名空間的概念,用關鍵字namespace來定義。…

LeetCode 二分查找

1.題目要求: 給定一個 n 個元素有序的(升序)整型數組 nums 和一個目標值 target ,寫一個函數搜索 nums 中的 target,如果目標值存在返回下標,否則返回 -1。示例 1:輸入: nums [-1,0,3,5,9,12], target 9 輸出: 4 解…

論文閱讀 - Intriguing properties of neural networks

Intriguing properties of neural networks 經典論文、對抗樣本領域的開山之作 發布時間:2014 論文鏈接: https://arxiv.org/pdf/1312.6199.pdf 作者:Christian Szegedy, Wojciech Zaremba, Ilya Sutskever, Joan Bruna, Dumitru Erhan, Ian Goodfellow,…

信息技術課堂上如何有效防止學生玩游戲?

防止學生在信息技術課堂上玩游戲需要綜合運用教育策略和技術手段。以下是一些有效的措施,可以用來阻止或減少學生在課堂上玩游戲的行為: 1. 明確課堂規則 在課程開始之初,向學生清楚地說明課堂紀律,強調不得在上課時間玩游戲。 制…

電阻負載柜的工作原理是什么?

電阻負載柜是用于模擬電網中各種負載特性的設備,廣泛應用于電力系統、新能源發電、電動汽車充電站等領域。其工作原理主要包括以下幾個方面: 1. 結構組成:電阻負載柜主要由變壓器、調壓器、電阻器、控制器、保護裝置等部分組成。其中&#xf…

理解神經網絡的通道數

理解神經網絡的通道數 1. 神經網絡的通道數2. 輸出的寬度和長度3. 理解神經網絡的通道數3.1 都是錯誤的圖片惹的禍3.1.1 沒錯但是看不懂的圖3.1.2 開玩笑的錯圖3.1.3 給人誤解的圖 3.2 我或許理解對的通道數3.2.1 動圖演示 1. 神經網絡的通道數 半路出嫁到算法崗,額…

數據防泄密軟件精選|6款好用的數據防泄漏軟件強推

某科技公司會議室,CEO張總、CIO李總、信息安全主管王經理正圍繞最近發生的一起數據泄露事件展開討論。 張總(憂慮): 大家,這次的數據泄露事件對我們來說是個沉重的打擊。客戶信息的外泄不僅損害了我們的信譽,還可能面…

DAY2:插件學習

文章目錄 插件學習ClangGoogle TestCMakeDoxygen 收獲 插件學習 Clang 是什么:Clang 是指 LLVM 項目的編譯器的前端部分,支持對 C 家族語言(C、C、Objective-C)的編譯。Clang 的功能包括:詞法分析、語法分析、語義分析、生成中間中間代碼 L…

【源碼+文檔+調試講解】智能倉儲系統 JSP

摘 要 隨著科學技術的飛速發展,社會的方方面面、各行各業都在努力與現代的先進技術接軌,通過科技手段來提高自身的優勢,智能倉儲系統當然也不能排除在外。智能倉儲系統是以實際運用為開發背景,運用軟件工程開發方法,采…