【JavaSE】面向對象——繼承性

繼承性

繼承性的概念

所謂繼承,就是程序猿在保持原有類特性的基礎上進行擴展,增加新功能,這樣的類被稱為派生類或者子類,原有類被稱為超類或者基類。

在對于繼承性概念進行書寫前,我曾查閱許多資料來保證對其表達的通俗性和準確性,但是發現貌似都是晦澀的,不像繼承性和多態性一樣。雖然定義是晦澀的,但是其含義還是很好理解的。

通俗的說,繼承就是A類繼承B類所有屬性和方法,在B類的基礎上進行擴展,增加一些新的功能,從而減少代碼的書寫。

繼承呈現了面向對象程序設計的層次結構,體現了由簡單到復雜的認知過程。

繼承解決的主要問題是:共性的抽取、實現代碼復用、實現多態。

為什么需要繼承性

Java中使用類來對現實世界中的實體進行描述,類經過實例化之后產生的對象,則就能用來表示現實中的實體。但是現實世界錯綜復雜,事物之間可能會存在一些關聯,那在程序設計時就需要進行考慮。

例如現實世界中的貓和狗,他們都屬于動物,自然也就會擁有年齡及體重等屬性。因此在將其抽象化為類時,就要考慮把這些屬性進行抽取。面向對象程序設計就提出了繼承的概念,專門用來進行共性抽取,實現代碼復用。

如何實現繼承性

使用關鍵字extends來實現繼承性。

public class A { // 父類、超類、基類// 屬性和方法
}public class B extends B { // 子類、派生類// 屬性和方法
}

繼承性的好處

1. 繼承的出現減少了代碼的冗余,提高了代碼的復用性。

2. 繼承性的出現,有利于功能的擴展。

3. 繼承描述事物之間的關系是“is-a”的關系,可見父類更通用,子類更具體。

4. 繼承為多態的使用提供了前提。

細節說明

1. Java中聲明的類,如果沒有顯式的聲明其父類時,則默認繼承于java.lang.Object類。

2. A類繼承B類之后,A類擁有B類所有的屬性和方法,但是由于權限修飾符的存在,可能一些屬性和方法無法使用,但是它確實在內存中有,只不過是無法使用而已。

3. A類繼承B類之后,除了繼承B類的所有屬性和方法之外,他還可以增加自己的屬性和方法。

4. 對于繼承性而言,它支持多層繼承,但是只支持單繼承。也就是說,A類可以繼承B類,B類可以繼承C類,C類可以繼承D類,這就是多層繼承;但是A類不能同時繼承B類和C類,只能繼承其中的一個類,這就是單繼承(單繼承屬于Java語言的一個局限性,后續通過類實現接口的方式,來解決單繼承的局限性)。

方法重寫

方法重寫的概念

子類對父類繼承過來的方法進行覆蓋、重寫的操作。

通俗的說,子類在繼承父類之后,子類就獲取了父類中聲明的所有方法,但是子類認為父類的某些方法并不適合自己進行調用,因此就會在子類中重寫方法的內容。

方法重寫的規則

1. 子類重寫父類的方法時,兩個方法的方法名與參數列表必須相同。

2. 子類在重寫父類的方法時,其子類重寫方法的權限修飾符必須不小于父類被重寫方法的權限修飾符。并且對于父類中private權限修飾的方法,子類是不能重寫的。

3. 子類在重寫父類的方法時,當父類被重寫方法的返回值是void或者基本數據類型時,子類重寫方法必須與父類被重寫方法的返回值類型相同。當父類被重寫方法的返回值是引用數據類型時,其子類重寫方法的返回值類型是對應引用數據類型或引用數據類型的子類。

4. 子類在重寫父類方法時,子類重寫方法拋出的異常類型必須是父類拋出異常類型對應類或者子類。

super關鍵字

super的理解

父類的,表示當前類在使用時,直接去直接父類中尋找,如果沒有找到,再去直接父類的直接父類尋找,追根溯源,直到找到或者到Object類中也沒找到,而不在當前類中查找需要調用的結構。如果沒有super,那么就先在本類中進行尋找,如果沒有找到再去繼承類中找。

在【JavaSE】類和對象一文中,曾對this關鍵字進行過簡單介紹。this表示當前對象或者當前正在創造的對象,而super表示當前對象對父類的調用或者當前正在創造的對象對父類的調用。在實例化時,本質上沒有子父類一說,屬性都創建在同一個內存環境中,但是便于理解和調用,使用super表示父類的屬性和方法。

super和this在使用上的結構基本上相同,只是含義不同。

?super可以調用的結構

屬性、構造器、方法。

在構造器中,super可以調用屬性、構造器和方法。但是在普通方法中,super只能調用屬性和方法,不能調用構造器。

super調用屬性、方法

結構:" super. "

子類在繼承父類之后,我們就可以在子類的方法或者構造器中,調用父類的屬性或者方法。一般情況下,都可以省略“super.”的結構,但是如果出現了子類重寫了父類的方法或者子類的屬性和父類的屬性名相同的情況下,還想要調用父類的方法和屬性,那么就要使用“super.”的結構了。

super調用構造器

結構:" super(形參列表) "

1. 子類繼承父類之后,不會繼承父類的構造器,只能通過“super(形參列表)”的形式來調用父類指定的構造器。

2. ”super(形參列表)“必須聲明在構造器的首行,而前面的”this(形參列表)“也必須聲明在構造器的首行。因此兩者在調用時,只能選其一,不能同時存在。

3. 當在構造器中,沒有聲明“super(形參列表)”和“this(形參列表)”時,默認會調用“super()”,也就是當兩者都不存在時,默認會調用父類中空參的構造器。

4. 根據上述可知,在對象實例化時,一個構造器中要么會調用本類重載的構造器,要么會調用父類的構造器。總之一定會直接或間接的調用到父類的構造器,也正是因為調用過父類的構造器,才會把父類中聲明的屬性或方法加載到內存中,供子類對象使用。

5. 一個類中聲明n個構造器,最多有n-1個構造器中使用了this,則剩下的一個構造器一定使用了super。

繼承性,就是子類通過extends關鍵字來繼承父類,從而得到父類中的屬性和方法。通過繼承性,在子類中擴展新的功能,使得代碼的復用性提高,同時也體現了面向對象程序設計中的層次結構。由于繼承性使得子類擁有父類所有的屬性和方法,但是可能父類的某些方法并不適合子類的功能,因此就出現了方法重寫這一概念。

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

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

相關文章

Some collections -- 2024.3

一、TensorFlow Android (dataset: Mnist) We used TensorFlow to define and train our machine learning model, which can recognize handwritten numbers, called a number classifier model in machine learning terminology. We transform the trained TensorFlow mod…

C++學習第五天(內存管理)

1、內存分布 int globalVar 1; static int staticGlobalVar 1; void Test() {static int staticVar 1;int localVar 1;int num1[10] { 1, 2, 3, 4 };char char2[] "abcd";const char* pChar3 "abcd";int* ptr1 (int*)malloc(sizeof(int) * 4);int…

2024.03.01作業

1. 基于UDP的TFTP文件傳輸 #include "test.h"#define SER_IP "192.168.1.104" #define SER_PORT 69 #define IP "192.168.191.128" #define PORT 9999enum mode {TFTP_READ 1,TFTP_WRITE 2,TFTP_DATA 3,TFTP_ACK 4,TFTP_ERR 5 };void get_…

高維中介數據:基于交替方向乘子法(ADMM)的高維度單模態中介模型的參數估計(入門+實操)

全文摘要 用于高維度單模態中介模型的參數估計,采用交替方向乘子法(ADMM)進行計算。該包提供了確切獨立篩選(SIS)功能來提高中介效應的敏感性和特異性,并支持Lasso、彈性網絡、路徑Lasso和網絡約束懲罰等不…

npm 鏡像源切換與設置

項目背景 依賴安裝中斷或響應特別慢。 可以看到當前所用的鏡像是 https://registry.npmjs.org 。 切換淘寶鏡像之后總算能夠安裝下來 命令行模式 查看當前鏡像源 # 查看當前鏡像源 npm config get registry 可以看到默認情況下是官方默認全局鏡像 https://registry.npmjs.o…

競爭加劇下,登頂后的瑞幸該做什么?

瑞幸咖啡僅用短短18個月時間從品牌創立到納斯達克上市,刷新全球最快上市記錄。2020年因交易造假事件被勒令退市股價暴跌80%,有人說這個創造了赴美IPO奇跡的“巨嬰”將是下一個倒下的ofo。2023年瑞幸咖啡以逆勢超速增長領跑咖啡賽道有力回應了市場的質疑&…

Vector中的begin和end函數是左閉右開的區間

vector::end() 函數的語法 vector::end(); 參數&#xff1a; none——它什么都不接受。 返回值&#xff1a; iterator– 它返回一個指向向量的 past-the-end 元素的迭代器。 實際上Vector中的begin和end函數是左閉右開的區間。 例&#xff1a; Input: vector<int>…

Java多線程實現發布和訂閱

目錄 簡介 步驟 1: 定義消息類 步驟 2: 創建發布者 步驟 3: 創建訂閱者 步驟 4: 實現發布-訂閱模型 前言-與正文無關 生活遠不止眼前的苦勞與奔波&#xff0c;它還充滿了無數值得我們去體驗和珍惜的美好事物。在這個快節奏的世界中&#xff0c;我們往往容易陷入工作的漩渦…

棋牌室計時計費管理系統的燈控器連接教程

棋牌室計時計費管理系統的燈控器連接教程 一、前言 以下教程以 佳易王棋牌室計時計費管理系統軟件V18.0為例說明 軟件文件下載可以點擊最下方官網卡片——軟件下載——試用版軟件下載 如上圖&#xff0c;計時計費軟件在開始計時的時候&#xff0c;點擊 開始計時 如果連接了…

YOLOv9獨家改進|動態蛇形卷積Dynamic Snake Convolution與空間和通道重建卷積SCConv與RepNCSPELAN4融合

專欄介紹&#xff1a;YOLOv9改進系列 | 包含深度學習最新創新&#xff0c;主力高效漲點&#xff01;&#xff01;&#xff01; 一、改進點介紹 Dynamic Snake Convolution是一種針對細長微弱的局部結構特征與復雜多變的全局形態特征設計的卷積模塊。 SCConv是一種即插即用的空間…

華為OD機試真題C卷-篇6

100分值題 寬度最小的子矩陣部門人力分配電腦病毒感染會議室占用時間段 寬度最小的子矩陣 給定一個n行 * m列的矩陣&#xff1b;給定一個k個整數的數組k_list&#xff1b;在n*m的矩陣中找一個寬度最小的子矩陣&#xff0c;該子矩陣包含k_list中所有的整數&#xff1b; 輸入描述…

【大數據】Flink SQL 語法篇(九):Window TopN、Deduplication

《Flink SQL 語法篇》系列&#xff0c;共包含以下 10 篇文章&#xff1a; Flink SQL 語法篇&#xff08;一&#xff09;&#xff1a;CREATEFlink SQL 語法篇&#xff08;二&#xff09;&#xff1a;WITH、SELECT & WHERE、SELECT DISTINCTFlink SQL 語法篇&#xff08;三&…

COM - get VARIANT value - .vt = (VT_BSTR | VT_ARRAY)

文章目錄 COM - get VARIANT value - .vt (VT_BSTR | VT_ARRAY)概述筆記END COM - get VARIANT value - .vt (VT_BSTR | VT_ARRAY) 概述 取到一個VARIANT值, .vt 0x2008, 查了一下, 0x2008 (VT_BSTR | VT_ARRAY) 查了資料, 這個vt 0x2008是BSTR的數組. 看看咋取值? 網上…

3.2 log |416. 分割等和子集,1049.最后一塊石頭的重量II,494.目標和

416. 分割等和子集 class Solution { public:bool canPartition(vector<int>& nums) {vector<int> dp(10001,0);int sumaccumulate(nums.begin(),nums.end(),0);if(sum%2) return false;int targetsum/2;for(int i0;i<nums.size();i){for(int jtarget;j>…

項目管理:高效推動項目成功的關鍵

項目管理&#xff1a;高效推動項目成功的關鍵 在當今競爭激烈的商業環境中&#xff0c;項目管理已成為企業實現目標和取得成功的關鍵因素。有效的項目管理不僅能夠確保項目按時完成&#xff0c;還能在預算范圍內達到預期的質量標準。本文將探討項目管理的重要性、關鍵環節以及…

Maven安裝并配置本地倉庫

一、安裝Maven 1.下載鏈接 Maven官網下載鏈接 Binary是可執行版本&#xff0c;已經編譯好可以直接使用。 Source是源代碼版本&#xff0c;需要自己編譯成可執行軟件才可使用。 tar.gz和zip兩種壓縮格式,其實這兩個壓縮文件里面包含的內容是同樣的,只是壓縮格式不同 tar.gz格…

Stable Video文本生成視頻公測地址——Scaling Latent Video Diffusion Models to Large Datasets

近期&#xff0c;Stability AI發布了首個開放視頻模型——"Stable Video"&#xff0c;該創新工具能夠將文本和圖像輸入轉化為生動的場景&#xff0c;將概念轉換成動態影像&#xff0c;生成出電影級別的作品&#xff0c;旨在滿足廣泛的視頻應用需求&#xff0c;包括媒…

STM32 DMA入門指導

什么是DMA DMA&#xff0c;全稱直接存儲器訪問&#xff08;Direct Memory Access&#xff09;&#xff0c;是一種允許硬件子系統直接讀寫系統內存的技術&#xff0c;無需中央處理單元&#xff08;CPU&#xff09;的介入。下面是DMA的工作原理概述&#xff1a; 數據傳輸觸發&am…

解決Java并發問題的常見思路

寫在文章開頭 近期對一些比較老的項目進行代碼走查&#xff0c;碰到一些極端的并發編程惡習&#xff0c;所以筆者就基于此文演示這類問題以及面對并發編程時我們應該需要了解一些常見套路。 Hi&#xff0c;我是sharkChili&#xff0c;是個不斷在硬核技術上作死的java coder&am…

基于 Amazon EKS 的 Stable Diffusion ComfyUI 部署方案

01 背景介紹 Stable Diffusion 作為當下最流行的開源 AI 圖像生成模型在游戲行業有著廣泛的應用實踐&#xff0c;無論是 ToC 面向玩家的游戲社區場景&#xff0c;還是 ToB 面向游戲工作室的美術制作場景&#xff0c;都可以發揮很大的價值&#xff0c;如何更好地使用 Stable Dif…