Java SE(8)——繼承

1.繼承的概念&作用

在Java中,繼承是面向對象編程的三大基本特性之一(還有封裝多態),允許一個類(子類/繼承類)繼承另一個類(父類/基類)的屬性方法

繼承的核心目的是:

  • 1.子類能夠在不改變父類原有特性的基礎上進行擴展
  • 2.實現代碼的復用和建立類之間的層次關系

在我們現有的知識儲備基礎上,如果要抽象出,代碼就要這么些:
在這里插入圖片描述
但我們不難發現,在上述抽象狗和貓的過程中,有部分代碼是重合的。這是因為狗和貓同屬于動物,都有名字、毛色和年齡,都會睡覺。那么我可以定義一個Animal類來對這些相同的代碼(共性)進行抽取,然后讓Dog和Cat類來繼承Animal類中的屬性
在這里插入圖片描述

2.繼承的語法格式

要實現類之間的繼承關系,需要借助extends關鍵字

修飾符 class 子類類名 extends 父類類名{
//其他代碼
}

在這里插入圖片描述
注意:

  • 1.父類中的所有成員變量和方法都會被子類繼承(即使是private修飾的成員也會被繼承)
  • 2.子類在繼承父類原有是特性的基礎上,必須要添加屬于自己的特性(對父類做出擴展),否則沒有繼承的必要

3.如何訪問父類中的成員

3.1 訪問父類中的成員變量

3.1.1 當父類和子類不存在同名變量時

在這里插入圖片描述
使用this關鍵字就能訪問子類對象中的所有變量
在這里插入圖片描述

3.1.2 當父類和子類存在同名變量時

在這里插入圖片描述
在這里插入圖片描述
注意:

  • 1.當在子類對象內部訪問成員變量時,優先訪問自己的成員變量
  • 2.如果自己沒有,就從父類繼承的成員變量中查找;如果父類中也沒有,就報錯
  • 3.當父類和子類中存在同名變量時,優先訪問子類自己的

如何訪問父類中的同名變量?
下面講到super關鍵字再說

3.2 訪問父類中的成員方法

當訪問父類和子類中的不同名方法時:
在這里插入圖片描述

  • 1.優先訪問子類自己的方法
  • 2.如果子類沒有該方法,從父類中查找;如果父類也沒有,報錯

當訪問父類和子類中的同名方法時:
在這里插入圖片描述

  • 3.如果父類和子類的同名方法構成重載,按照調用調用方法時傳遞的參數列表進行匹配

如果父類和子類的方法不僅方法名一樣,參數列表也一樣呢?
此時父類和子類的方法之間構成了重寫重寫的方法也可以通過super關鍵字來訪問。至于重寫是什么?以及它們之間的調用關系等到講多態的時候再介紹

4.super關鍵字

4.1 使用super訪問父類的成員

在Java中,super關鍵字用于在子類中引用其父類的成員。以上面的dog對象為例,super的訪問范圍如下:在這里插入圖片描述
所以在父類和子類中出現同名成員變量時,如果想要訪問父類的同名變量就需要借助super關鍵字
在這里插入圖片描述
如果想要訪問父類和子類中方法名一樣,參數列表也一樣的成員方法時,也可以借助super關鍵字
在這里插入圖片描述

4.2 super&this的共性和區別①

共性:

  • 1.都屬于Java中的關鍵字
  • 2.都只能在非靜態方法中訪問非靜態的方法和變量

區別:

  • 1.this表示當前對象的引用,當前對象就是調用實例方法的對象;super是指向 當前對象中父類繼承的成員方法和變量引用
  • 2.從訪問范圍來看,this可以訪問當前對象中的多有成員,但是super只能訪問當前對象中從父類繼承的成員 在這里插入圖片描述

5.構造方法&初始化順序

5.1 父類和子類的構造關系和執行順序

當創建一個子類對象時,Java會先調用父類的構造方法對父類的成員變量進行初始化,在父類初始化完畢后再調用子類的構造方法對子類的成員變量進行初始化(先有父再有子)。而在子類的構造方法中調用父類的構造方法也需要借助super關鍵字
在這里插入圖片描述
即使調用父類的無參構造方法,在子類的構造方法中也必須要顯式地寫出super
在這里插入圖片描述

  • super語句必須放在構造方法中的第一行

5.2 super&this的區別②

  • 1.在構造方法中,this(…)用于調用本類構造方法,super(…)用于調用父類構造方法。this(…)和super(…)都必須放在構造方法中的第一句,所以在構造方法中this(…)和super(…)不能同時存在
  • 2.在子類構造方法中一定存在super(…)的調用(因為父類會默認生成無參構造方法),但是this(…)用戶不寫就沒有

5.3 初始化順序

在上篇JavaSE(7)——類和對象(二)中介紹了三種代碼塊的作用和執行順序。

  • 1.實例代碼塊一般用于初始化實例成員變量,靜態代碼塊一般用于初始化靜態成員變量
  • 2.靜態代碼塊最先執行且在整個類的聲明周期中只會執行一次;實例代碼塊比構造方法先執行,每實例化一個對象都會執行實例代碼塊

當對象之間引入了繼承關系時,父類和子類的代碼塊和構造方法的執行順序是怎么的呢?

public class Father {//public Father(){System.out.println("父類的無參構造方法");}//{System.out.println("父類的實例代碼塊");}//static {System.out.println("父類的靜態代碼塊");}
}
public class Son extends Father {//public Son(){super();System.out.println("子類的無參構造方法");}//{System.out.println("子類的實例代碼塊");}//static {System.out.println("子類的靜態代碼塊");}
}
public class Test {//public static void main(String[] args) {Son son = new Son();}
}

執行結果:
父類的靜態代碼塊
子類的靜態代碼塊
父類的實例代碼塊
父類的無參構造方法
子類的實例代碼塊
子類的無參構造方法

6. 訪問限定修飾符——protected(受保護的)

被聲明為protected的成員變量/方法,可以被同一個包中的任意類訪問,也可以被其他包中的子類訪問
在這里插入圖片描述

注意一:protected成員的訪問權限是基于類層級結構(繼承)和包結構的,而不是對象的引用在這里插入圖片描述
要想訪問父類的protected成員只能在子類內部,無法在外部包的非子類中通過子類的引用來訪問

注意二:在子類中,只能通過子類自己的引用來訪問父類的protected成員無法在子類中通過其他子類的引用來訪問父類的protected成員
在這里插入圖片描述

6.final關鍵字

在Java中,final關鍵字主要用于限制類、方法和變量的可變性可繼承性

6.1 final修飾類

表示該類不能被繼承
在這里插入圖片描述

6.2 final修飾成員方法

表示該方法不能被重寫
在這里插入圖片描述
重寫的概念下篇博文再介紹

6.3 final修飾變量

final修飾成員變量:定義成員變量的同時必須進行初始化

final修飾局部變量:

  • 1.定義局部變量的同時進行初始化,之后無法修改該變量的值
    -2.定義局部變量時未初始化,在第一次初始化之后,無法再修改該變量的值

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

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

相關文章

Python爬蟲(18)反爬攻防戰:動態IP池構建與代理IP實戰指南(突破95%反爬封禁率)

目錄 引言一、背景:為什么代理IP是爬蟲的“第二生命”?1.1 反爬系統的IP檢測三把刀1.2 代理IP的核心價值 二、基礎實戰:快速搭建代理IP系統2.1 免費代理IP的獲取與篩選2.2 代理IP的智能容錯機制 三、高階攻防:突破企業級反爬封鎖3…

LFU算法解析

文章目錄 LFU緩存中關鍵變量的訪問與更新機制1. min_freq - 最小頻率訪問時機更新時機更新示例 2. capacity - 緩存容量訪問時機更新時機訪問示例 3. key_to_node - 鍵到節點的映射訪問時機更新時機更新示例 4. freq_to_dummy - 頻率到鏈表啞節點的映射訪問時機更新時機更新示例…

ByteArrayInputStream 類詳解

ByteArrayInputStream 類詳解 ByteArrayInputStream 是 Java 中用于從字節數組讀取數據的輸入流,位于 java.io 包。它允許將內存中的字節數組當作輸入流來讀取,是處理內存數據的常用工具。 1. 核心特性 內存數據源:從字節數組(b…

rvalue引用()

一、先確定基礎:左值(Lvalue)和右值(Rvalue) 理解Rvalue引用,首先得搞清楚左值和右值的概念。 左值(Lvalue):有明確內存地址的表達式,可以取地址。比如變量名、引用等。 復制代碼 int a = 10; // a是左值 int& ref = a; // ref也是左值右值(Rval…

吳恩達深度學習作業 RNN模型——字母級語言模型

一. 簡單復習一下RNN RNN RNN適用于處理序列數據,令是序列的第i個元素,那么就是一個長度為的序列,NLP中最常見的元素是單詞,對應的序列是句子。 RNN使用同一個神經網絡處理序列中的每一個元素。同時,為了表示序列的…

基于python的哈希查表搜索特定文件

Python有hashlib庫,支持多種哈希算法,比如MD5、SHA1、SHA256等。通常SHA256比較安全,但MD5更快,但可能存在碰撞風險,得根據自己需求決定。下面以SHA256做例。 import hashlib import os from typing import Dict, Lis…

idea創建springboot項目無法創建jdk8原因及多種解決方案

idea創建springboot項目無法創建jdk8原因及多種解決方案 提示:幫幫志會陸續更新非常多的IT技術知識,希望分享的內容對您有用。本章分享的是springboot的使用。前后每一小節的內容是存在的有:學習and理解的關聯性。【幫幫志系列文章】&#x…

【C++進階十】多態深度剖析

【C進階十】多態深度剖析 1.多態的概念及條件2.虛函數的重寫3.重寫、重定義、重載區別4.C11新增的override 和final5.抽象類6.虛表指針和虛表6.1什么是虛表指針6.2指向誰調用誰,傳父類調用父類,傳子類調用子類 7.多態的原理8.單繼承的虛表狀態9.多繼承的…

面向網絡安全的開源 大模型-Foundation-Sec-8B

1. Foundation-Sec-8B 整體介紹 Foundation-Sec-8B 是一個專注于網絡安全領域的大型語言模型 (LLM),由思科的基礎人工智能團隊 (Foundation AI) 開發 。它基于 Llama 3.1-8B 架構構建,并通過在一個精心策劃和整理的網絡安全專業語料庫上進行持續預訓練而得到增強 。該模型旨在…

Python爬蟲的基礎用法

Python爬蟲的基礎用法 python爬蟲一般通過第三方庫進行完成 導入第三方庫(如import requests ) requests用于處理http協議請求的第三方庫,用python解釋器中查看是否有這個庫,沒有點擊安裝獲取網站url(url一定要解析正確&#xf…

WHAT - Tailwind CSS + Antd = MetisUI組件庫

文章目錄 Tailwind 和 Antd 組件庫MetisUI 組件庫 Tailwind 和 Antd 組件庫 在 WHAT - Tailwind 樣式方案(不寫任何自定義樣式) 中我們介紹了 Tailwind,至于 Antd 組件庫,我們應該都耳熟能詳,官網地址:htt…

Day 4:牛客周賽Round 91

好久沒寫了,問題還蠻多的。聽說這次是苯環哥哥出題 F題 小苯的因子查詢 思路 考慮求因子個數,用質因數分解;奇數因子只需要去掉質數為2的情況,用除法。 這里有個比較妙的細節是,提前處理出數字x的最小質因數&#xff0…

使用直覺理解不等式

問題是這個: 題目 探究 ∣ max ? b { q 1 ( z , b ) } ? max ? b { q 2 ( z , b ) } ∣ ≤ max ? b ∣ q 1 ( z , b ) ? q 2 ( z , b ) ∣ |\max_b\{q_1(z,b)\}-\max_b\{q_2(z,b)\}|\le\max_b|q_1(z,b)-q_2(z,b)| ∣maxb?{q1?(z,b)}?maxb?{q2?(z,b)}∣≤…

惡心的win11更新DIY 設置win11更新為100年

?打開注冊表編輯器?:按下Win R鍵,輸入regedit,然后按回車打開注冊表編輯器。?12?導航到指定路徑?:在注冊表編輯器中,依次展開HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsUpdate\UX\Settings?新建DWORD值?&…

嵌入式驅動學習

時鐘 定義 周期型的0、1信號 時鐘信號由“心臟”時鐘源產生,通過“動脈”時鐘樹傳播到整個芯片中。 SYSCLK系統時鐘,由HSI、HSE、PLLCLK三選一。 HCLK是AHB總線時鐘, PCLK是APB總線時鐘。 使用某個外設,必須要先使能該外設時鐘系統…

Java:從入門到精通,你的編程之旅

Java,一門歷久彌新的編程語言,自誕生以來就以其跨平臺性、面向對象、穩定性和安全性等特性,在企業級應用開發領域占據著舉足輕重的地位。無論你是初學者還是經驗豐富的開發者,Java 都能為你提供強大的工具和廣闊的舞臺。 為什么選…

Linux:深入理解數據鏈路層

實際上一臺主機中,報文并沒有通過網絡層直接發送出去,而是交給了自己的下一層協議——數據鏈路層!! 一、理解數據鏈路層 網絡層交付給鏈路層之前,會先做決策再行動(會先查一下路由表,看看目標網…

Python基本語法(類和實例)

類和實例 類和對象是面向對象編程的兩個主要方面。類創建一個新類型,而對象是這個 類的實例,類使用class關鍵字創建。類的域和方法被列在一個縮進塊中,一般函數 也可以被叫作方法。 (1)類的變量:甴一個類…

2025 年如何使用 Pycharm、Vscode 進行樹莓派 Respberry Pi Pico 編程開發詳細教程(更新中)

micropython 概述 micropython 官方網站:https://www.micropython.org/ 安裝 Micropython 支持固件 樹莓派 Pico 安裝 Micropython 支持固件 下載地址:https://www.raspberrypi.com/documentation/microcontrollers/ 選擇 MicroPython 下載 RPI_PIC…

flink rocksdb狀態說明

文章目錄 1.默認情況2.flink中的狀態3.RocksDB4.對比情況5.使用6.RocksDB架構7.參考文章8.總結提示:以下主要考慮flink 狀態永久存儲 rocksdb情況,做一些簡單說明 1.默認情況 當flink使用rocksdb存儲狀態時。無論是永久存儲還是臨時存儲都可能會落盤寫文件(如果沒有配置存儲…