java 之 繼承

一、繼承

1.1 、什么是繼承?

  • 繼承就是把所有的類的公共部分(相同的成員)提取出來,放到一個類中
  • 繼承需要使用 extends 關鍵字
public class Animal{
public String name;
}
public class Dog extends Animal{}

Dog 是 Animal 的子類,Animal 是 Dog 的父類,發生繼承關系后子類中包含有父類中的成員(成員方法和成員變量)

  • 子類中要有自己特色的代碼,否則直接調用父類就行了,還要子類干嘛?

1.2、為什么繼承?

  • 因為繼承是把所有類的公共部分提取取來放到一個類中,那么想用這公共部分的類可以繼承,那么就實現了代碼的復用性

1.3、繼承的好處?

  • 我們知道,父類是公共成員,那么子類中也有子類的特色成員,除了實現代碼的復用外,還讓代碼有拓展的能力

1.4、父類成員的訪問

  • 當子類繼承父類后,通過子類的對象是可以訪問父類當中的成員變量和成員方法的。
  • 就是表明子類創建出來的對象,包含了父類的內容
  • 子類和父類的內存布局如下
    在這里插入圖片描述

1.4.1、子類和父類不存在同名成員變量

  • 子類new對象,用引用直接訪問就行,比如你訪問的是一個變量,他的機制就是首先在子類中尋找,如果沒有,就到父類中尋找,父類中也沒有的話就會報錯
Dog dog1 = new Dog();
//這樣就能訪問到父類的name
dog1.name;

1.4.2、子類和父類的成員變量同名

  • 如果有同名的話,加 this 就是子類中的,加 super 就是父類的
//假如子類中也有name 叫 旺財 , 父類中也有相同的變量name 叫 大黃
this.name; // 那么就會訪問子類中的name輸出旺財
super.name; // 那么就會訪問父類中的name 輸出大黃

如果什么都不加呢?上面我說他的訪問機制是先從子類找,再到父類找,所以優先訪問子類的

1.4.3、子類和父類的成員方法名字不同

  • 調用誰就是誰,和成員變量一樣

1.4.4、子類和父類的成員方法名字相同

  • 如果完全一樣(包括參數)那么子類的優先, 子類沒有就調用父類的,父類沒有就報錯,如果構成了重載那么就是 調用誰就是誰

1.5、super關鍵字

1.5.1、什么是super關鍵字?

  • super 主要作用是在子類中訪問父類的成員
  • 如果兩個類發生了繼承關系的話,我們知道子類中有父類的成員,所以如果我們想調用父類的成員那么怎么調用呢?此時就有了super ,super是子類中屬于父類那一部分內存空間的標識,所以就可以使用super調用父類的成員

1.5.2、super 關鍵字的用法?

  • super 的用法是訪問父類的成員方法
  • 訪問父類的成員變量
  • 訪問父類的構造方法

1.5.3、super 關鍵字使用的范圍

  • super 只能在非靜態的方法中使用,或者在子類中訪問父類的成員
  • super 調用父類構造方法時,和this調用當前類的另一個構造方法一樣,需要調用幾個參數的就調用幾個參數的,并且要放在子類的構造方法中的第一行代碼。我們知道this()也需要放在第一行,所以super()和 this() 不能同時使用,否者不知道哪個是第一行的

1.5.4、super 和 this 的區別

  • 修飾變量時 super 調用的是父類中的成員變量,而 this 調用的是當前引用所指的對象的成員變量
  • 修飾方法時 super 調用的是父類中的成員方法,而 this 調用的是當前引用所指的對象的成員方法
  • 調用構造方法時 super 調用的是父類的構造方法,而this 是調用當前類的另一個構造方法
  • 因為在調用完成子類的構造方法之前要調用父類的構造方法,如果父類是系統默認的構造方法(即無參的構造方法),那么在子類的構造方法中系統會在第一行默認隱藏一個super調用父類構造方法的代碼。所以super()系統有時會調用,而this()只能自己寫才調用

1.6、子類構造方法

  • 我們知道子類中也會有成員變量的,有變量就少不了初始化,既然子類的需要初始化,那么父類的成員變量也是需要初始化的,究竟該怎么寫構造方法呢?俗話說有父才有子,所以需要初始化父類的成員變量先,再初始化子類的成員變量。那么就有了在子類構造方法完成之前先調用父類的構造方法(即使用super()調用),需注意的是super()必須要放在子類構造方法的第一行
  • 子類的構造方法中,一定有super();

1.7、繼承關系上代碼塊等的初始化順序

  • 前面我們講過代碼塊的初始化順序,優先執行靜態代碼塊,接著到實例代碼塊,最后到構造方法,同級的按順序
  • 那么在繼承關系下,他們的執行順序是怎么樣的呢?
  • 我們在上面知道,先有父再有子,先初始化父類,再初始化子類。但是我們也知道,靜態代碼塊只要類一加載便執行,所以綜上所述,先執行父類的靜態代碼塊,再執行子類的靜態代碼塊,接著執行父類的實例代碼塊,父類的構造方法,最后執行子類的構造代碼塊,子類的構造方法

1.8、protected 訪問修飾限定符 的詳解

  • 被 protected 修飾后 不同包中的子類可以訪問
  • 就是有一個類(Animal)存在包一中,有一個類(Dog)存在包二中,并且這兩個類在包二中發生的了繼承關系,那么在包二 Dog 這個類中可以訪問包一Animal 中 被 protected 修飾過的 成員變量
  • 那么在包二中非繼承包一Animal 的類是不能訪問的
  • 那么如果在包二中再創建一個 Cat 類 并且繼承于Animal,那么它在自己的類中可以訪問Animal中被 protected 修飾的成員變量,但是當Cat 在 Dog類中實例化對象時,這個引用不能訪問父類中被 protected 所修飾的成員變量,所以說 他只能在自己的(Cat)子類中訪問,不能在其他(Dog)子類中訪問
public class Dog extends Animal{
}

1.9、繼承的方式

  • A 繼承 B ,B < — A;單繼承
  • A 繼承 B ,B 繼承 C C < — B < — A;多層繼承

在A實例化出來的對象的引用可以訪問 C中的成員

  • A 繼承B ,a 繼承 B B < — A , B < — a;一個類被多個類繼承
  • 注意:Java不支持一個類同時繼承兩個或兩個以上的類

1.10、final關鍵字

1.10.1、什么是final關鍵字

  • final 是不可更改的意思
  • 可以修飾變量,語句,方法,類

1.10.2、final 關鍵字修飾變量 或字段

  • 當final修飾變量時,把變量變成了常變量,意思就是把一個變量變為常量

1.10.3、final關鍵字修飾方法

  • 當final 修飾方法時,表明這個方法不能被重寫

1.10.4、final 關鍵字修飾類

  • 當final修飾類時,表明這個類不能被繼承

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

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

相關文章

強化應急通信生命線:遨游三防平板、衛星電話破局極端災害救援

暴雨傾盆&#xff0c;山洪咆哮&#xff0c;城市陷入內澇。今年進入汛期以來&#xff0c;我國廣東、福建、河南、陜西、京津冀等地相繼遭遇暴雨、洪澇、山洪等災害&#xff0c;道路損毀、基站斷網、電力中斷等次生問題為應急響應帶來嚴峻挑戰。如何保障極端場景下的通信暢通&…

【Linux系統】進程間通信:命名管道

1. 匿名管道的限制匿名管道存在以下核心限制&#xff1a;僅限親緣關系進程&#xff1a;只能用于父子進程等有血緣關系的進程間通信&#xff08;如通過 fork() 創建的子進程&#xff09;。單向通信&#xff1a;數據只能單向流動&#xff08;一端寫&#xff0c;另一端讀&#xff…

Python Day24 多線程編程:核心機制、同步方法與實踐案例

一、線程事件對象&#xff08;threading.Event&#xff09;threading.Event 用于實現線程間的通信&#xff0c;可讓一個線程通知其他線程終止任務&#xff0c;核心是通過 “事件觸發” 機制協調線程行為。核心方法&#xff1a;創建事件對象&#xff1a;event threading.Event(…

007 前端( JavaScript HTML DOM+Echarts)

一.html dom運用查找html元素的三種方式通過 id 找到 HTML 元素通過標簽名找到 HTML 元素通過類名找到 HTML 元素1.通過 id 找到 HTML 元素<!DOCTYPE html> <html> <head> <meta charset"utf-8"> <title>msf的網頁</title> <…

實習文檔背誦

實習內容:1.定時任務與數據補全:基于 XXL-JOB 實現分布式定時任務調度&#xff0c;補全近半年歷史操作日志數據&#xff0c;有效解決因網絡異常導致的數據缺失問題。業務場景&#xff1b;集團的4a日志半年內沒有同步&#xff0c;這邊需要把日志數據同步到集團上首先先評估每天的…

分布式CAP定理

CAP 定理在一個分布式系統中&#xff0c;以下三個特性不可能同時完全滿足&#xff0c;最多只能滿足其中兩個&#xff1a;C&#xff08;Consistency&#xff0c;一致性&#xff09;&#xff1a;所有節點在同一時間看到的數據是完全一致的&#xff08;即更新操作成功并返回后&…

PHP-Casbin:現代化 PHP 應用的權限管理引擎

在當今復雜的Web應用中&#xff0c;精細化的權限管理是保障系統安全的關鍵環節。PHP-Casbin 作為Casbin生態的PHP實現&#xff0c;憑借其靈活的模型支持和強大的擴展能力&#xff0c;已成為PHP開發者實現訪問控制的首選工具。 超越傳統權限模型 PHP-Casbin 基于PERM&#xff…

FastDeploy2.0:環境變量的說明

一、執行# 設置日志目錄 export FD_LOG_DIR/workspace/models/log# 指定使用的 GPU 設備 export CUDA_VISIBLE_DEVICES0,1,2,3# 創建日志目錄&#xff08;如果不存在&#xff09; mkdir -p "$FD_LOG_DIR"# 定義日志文件路徑 LOG_FILE"$FD_LOG_DIR/fastdeploy_se…

C語言:指針(1-2)

5. 指針運算指針的基本運算有三種&#xff0c;分別是&#xff1a;指針-整數指針-指針指針的關系運算5.1 指針運算在上面&#xff0c;我們知道&#xff0c;數組在內存中是連續存放的&#xff0c;只要知道第一個元素的地址&#xff0c;順藤摸瓜就能找到后面的所有元素。那么&…

【多模態】DPO學習筆記

DPO學習筆記1 原理1.0 名詞1.1 preference model1.2 RLHF1.3 從RLHF到DPOA.解的最優形式B. DPO下參數估計C. DPO下梯度更新D. DPO訓練的穩定性2 源代碼2.1 數據集構成2.2 計算log prob2.3 DPO loss1 原理 1.0 名詞 preference model&#xff1a;對人類偏好進行建模&#xff0…

2025最新、UI媲美豆包、DeepSeek等AI大廠的AIGC系統 - IMYAI源碼部署教程

IMYAI 系統部署與使用手冊 一、系統演示 &#x1f539; 快速體驗 前端演示地址&#xff1a;https://super.imyaigc.com后臺演示地址&#xff1a;https://super.imyaigc.com/settings &#x1f539; 技術架構 前端&#xff1a;Vite Vue3 NaiveUI TailwindCSS Plyr后端&…

【關于Java的反射】

在 Java 編程中&#xff0c;反射&#xff08;Reflection&#xff09; 是一個非常強大的工具&#xff0c;它允許你在運行時動態地獲取類的信息、創建對象、調用方法和訪問字段。雖然反射功能強大&#xff0c;但它也有一些局限性和性能開銷&#xff0c;因此需要謹慎使用。一、什么…

Gitee推出“移動軟件工廠“解決方案 解決嵌入式與涉密場景研發困局

Gitee推出"移動軟件工廠"解決方案 破解嵌入式與涉密場景研發困局 隨著數字化轉型浪潮的推進&#xff0c;軟件開發正面臨著前所未有的復雜環境挑戰。特別是在嵌入式系統、FPGA開發以及涉密信息系統等特殊場景下&#xff0c;研發團隊往往需要在高安全要求與有限網絡環境…

低功耗16*8位四線串行8*4按鍵陣矩LED驅動專用電路

概述&#xff1a;PC0340是占空比可調的LED顯示控制驅動電路。由16根段輸出、8根位輸出、數字接口、數據鎖存器、顯示存儲器、鍵掃描電路及相關控制電路組成了一個高可靠性的單片機外圍LED驅動電路。串行數據通過4線串行接口輸入到PC0340&#xff0c;采用LQFP44L的封裝形式。本產…

通過自定義注解加aop切面實現權限控制

前言&#xff1a;自定義注解&#xff0c;通過aop切面前置通知&#xff0c;對請求接口進行權限控制1&#xff0c;創建枚舉類package org.springblade.sample.annotationCommon;import lombok.AllArgsConstructor; import lombok.Getter;import java.util.Arrays; import java.ut…

IDS知識點

在網絡安全工程師、系統運維工程師等崗位的面試中&#xff0c;??IDS&#xff08;Intrusion Detection System&#xff0c;入侵檢測系統&#xff09;?? 是高頻考點&#xff0c;尤其是對網絡安全防護、安全監控類崗位。以下是IDS的核心考點和必須掌握的知識點&#xff0c;按優…

Adobe Analytics 數據分析平臺|全渠道客戶行為分析與體驗優化

Adobe Analytics 是業界領先的數據分析平臺&#xff0c;幫助企業實時追蹤客戶行為&#xff0c;整合多渠道數據&#xff0c;通過強大的分析與可視化工具深入分析客戶旅程&#xff0c;優化數字體驗。結合 Adobe Experience Cloud&#xff0c;Adobe Analytics 成為推動數字化增長和…

【輪播圖】H5端輪播圖、橫向滑動、劃屏效果實現方案——Vue3+CSS position/CSS scroller

文章目錄定位實現滑屏效果前置知識CSS: touch-action屬性CSS: transform屬性觸摸事件forEach回調占位符準備階段實現移動效果實現跟手效果觸摸結束優化完整代碼滾動實現滑屏效果前置知識CSS: scroll-snap-type屬性準備階段實現滑動效果實現吸附效果滾動條隱藏存在問題完整代碼s…

忘記了WordPress管理員密碼的找回方法

WordPress管理員密碼找回方法 如果您忘記了WordPress管理員密碼&#xff0c;可以通過以下幾種方法找回或重置&#xff1a; 方法1&#xff1a;通過電子郵件重置(最簡單) 訪問您的WordPress登錄頁面(通常是wodepress.com/wp-admin或wodepress.com/wp-login.php) 點擊”忘記密…

RAFT:讓語言模型更聰明地用文檔答題

RAFT&#xff1a;讓語言模型更聰明地用文檔答題 作者注&#xff1a; 本文旨在面向零基礎讀者介紹 UC Berkeley 提出的 RAFT&#xff08;Retrieval-Augmented Fine-Tuning&#xff09;方法。它是一種訓練語言模型的新方式&#xff0c;讓模型更好地利用“外部知識”——比如文檔、…