【Java繼承】(超級詳細!!!)

【Java繼承】(超級詳細!!!)

  • 1、 繼承的概念
  • 2 、繼承的語法
  • 3、 父類成員訪問
    • 3.1 子類中訪問父類的成員變量
    • 3.2 子類中訪問父類的成員方法
  • 4、 super關鍵字
  • 5 、子類的構造方法
  • 6、 繼承關系上的執行順序
  • 7、protected 關鍵字
  • 8、繼承方式
  • 9、final 關鍵詞

1、 繼承的概念

繼承機制:是面向對象程序設計使代碼可以復用的最重要的手段,它允許程序員在保持原有類特性的基礎上進行擴展,增加新功能,這樣產生新的類,稱派生類。繼承呈現了面向對象程序設計的層次結構, 體現了由簡單到復雜的認知過程。繼承主要解決的問題是:共性的抽取,實現代碼復用

例如:小貓和小狗都是(有名字有年齡要吃飯)的動物。

在這里插入圖片描述
上述圖示中,Dog和Cat都繼承了Animal類。
其中:Animal類稱為父類/基類或超類,Dog和Cat可以稱為Animal的子類/派生類。
繼承之后,子類可以復用父類中成員,子類在實現時只需關心自己新增加的成員即可。

下面我們將學習繼承的語法,利用代碼實現上述繼承關系!

2 、繼承的語法

修飾符 class 子類名 extend 父類名(){//...
}

在這里插入圖片描述

注意:

  • 子類會將父類中的成員變量或者成員方法繼承到子類中
  • 子類繼承父類之后,必須要新添加自己特有的成員,體現出與基類的不同,否則就沒有必要繼承了

3、 父類成員訪問

3.1 子類中訪問父類的成員變量

在這里插入圖片描述

  • 如上圖a所示:當子類和父類中同時有成員變量a時,訪問的是子類的成員變量a
  • 如上圖b所示:當子類沒有成員變量b,而父類有成員變量b時,訪問的是父類的成員變量b
  • 如上圖c所示:當子類有成員變量c,父類沒有成員變量c時,訪問的是子類的成員變量c

注意:
成員變量訪問遵循就近原則,自己有優先自己的,如果沒有則向父類中找。

3.2 子類中訪問父類的成員方法

在這里插入圖片描述

  • 如上圖test1所示:子類中沒有成員方法test1,父類中有成員方法test1,所以訪問的是父類中的成員方法test1
  • 如上圖test2所示:子類中有成員方法test2,父類中沒有成員方法test2,所以訪問的是子類中的成員方法test2
  • 如上圖test所示:子類和父類都有成員方法test,同樣遵循就近原則,訪問的是子類的成員方法test

下面我們進行一個小測試,從而使我們更深入的了解該知識點。

//父類
public class Father {int a=1;int b=1;public void test1(int a){System.out.println("父類test1,數字結果為:"+a);}public void test1(){System.out.println("父類test1,無參數");}}
//子類
public class Son extends Father{int a=2;int c=2;public void test1(){System.out.println("子類test1,無參數");}public void func(){test1();test1(a+c);test1(b+c);}
}
//主函數
public class Main {public static void main(String[] args) {Son son=new Son();son.func();}
}

打印結果:
子類test1,無參數
父類test1,數字結果為:4
父類test1,數字結果為:3

4、 super關鍵字

通過上述知識我們知道:當子類和父類中存在相同名稱的成員時,訪問子類的成員。
那么,,如果要在子類方法中訪問父類同名成員時,該如何操作?
此時便需要用到關鍵詞super

這里是引用

  • super只能在非靜態方法中使用
  • 在子類方法中訪問父類的成員變量和方法

super的用法遠不止這些,super的其他方法會在下文中提到。

5 、子類的構造方法

這里是引用

  • 若父類顯式定義無參或者默認的構造方法,在子類構造方法第一行默認有隱含的super()調用,即調用基類構造方法
  • 如果父類構造方法是帶有參數的,此時需要用戶為子類顯式定義構造方法,并在子類構造方法中選擇合適的父類構造方法調用,否則編譯失敗。
  • 在子類構造方法中,super(…)調用父類構造時,必須是子類構造函數中第一條語句。
  • super(…)只能在子類構造方法中出現一次,并且不能和this同時出現

6、 繼承關系上的執行順序

//父類
public class Father1 {int a;int b;//構造方法public Father1(int a, int b) {this.a = a;this.b = b;System.out.println("父類,構造方法");}{System.out.println("父類,實例方法");}static {System.out.println("父類,靜態方法");}
}
//子類
public class Son extends Father1 {public Son(int a, int b) {super(a, b);System.out.println("子類,構造方法");}{System.out.println("子類,實例方法");}static {System.out.println("子類,靜態方法");}
}
//主方法
public class Main {public static void main(String[] args) {Son son=new Son(1,2);System.out.println("=============");Son son1=new Son(1,2);}
}

打印結果:
父類,靜態方法
子類,靜態方法
父類,實例方法
父類,構造方法
子類,實例方法
子類,構造方法
=============
父類,實例方法
父類,構造方法
子類,實例方法
子類,構造方法

由上述代碼可以得出結論:

  • 首先依次執行父子類的靜態方法
  • 接著依次進行父類的實例方法和構造方法
  • 最后依次進行子類的實例方法和構造方法
  • 靜態方法只執行一次

7、protected 關鍵字

在這里插入圖片描述

1.同一包中的同一類
在這里插入圖片描述

2.同一包的不同類
在這里插入圖片描述

3.不同包中的子類
在這里插入圖片描述

4.不同包中的非子類
在這里插入圖片描述

8、繼承方式

在這里插入圖片描述

注意:Java不能實現多繼承!!!

9、final 關鍵詞

1.final 修飾變量或字段
在這里插入圖片描述
2.final 修飾類
在這里插入圖片描述
3.final 修飾方法
在這里插入圖片描述

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

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

相關文章

ubuntu20.04安裝后配置:wifi、屏幕亮度、Nvidia驅動等

文章目錄 一、安裝時最好用英語,否則Downloads等home下文件夾是中文二、安裝后開機無法進入系統圖形界面三、清理不必要軟件,更新系統四、屏幕亮度、Nvidia驅動五、wifi 一、安裝時最好用英語,否則Downloads等home下文件夾是中文 安裝完再在…

error: ‘address‘ in ‘class school‘ does not name a type school:: address = “

錯誤代碼 class school{ public:string name;static string address; public:static string getAddress(){return address;} };school::address "南京路";原因 school::address “南京路”;前面未加類型,導致編譯錯誤 解決 class school{ public:stri…

選項卡式小部件QTabWidget

文章目錄 1. 詳細介紹2. 常用屬性3. 信號4. 常用函數5. 官方示例Tab Dialog QTabWidget提供一堆選項卡式小部件。 1. 詳細介紹 選項卡式部件提供一個選項卡欄和一個用于顯示與每個選項卡相關的頁面的頁面區域。 默認情況下,選項卡欄顯示在頁面區域上方,…

Vue.js - 計算屬性與偵聽器 【0基礎向 Vue 基礎學習】

文章目錄 計算屬性 computedcomputed 的使用方法computed 與 method 的區別計算屬性完整寫法 watch 偵聽器(監視器)簡單寫法 → 簡單類型數據,直接監視完整寫法 → 添加額外配置項 計算屬性 computed computed 的使用方法 **概念&#xff1…

web題解,基礎知識鞏固(qsnctf)

1.文章管理系統 1)打開題目,把它頁面翻完了,沒看懂它有啥用 2)看了看源碼,也是一樣的,沒找到有用的東西 3)想著可能還是在隱藏文件里找,那我就直接用dirsearch掃掃看 4)…

初識C++ · 模擬實現vector

目錄 前言: 1 部分簡單函數的實現 2 push_back和pop_back 3 reserve和resize 4 Print_vector 5 insert和erase 6 拷貝構造 7 構造 8 賦值 9 memcpy的問題 10 迭代器失效 前言: 繼上文模擬實現了string之后,接著就模擬實現vector&…

DataFrame—數據匯總9

s3.sort_index() 文章最前: 我是Octopus,這個名字來源于我的中文名--章魚;我熱愛編程、熱愛算法、熱愛開源。所有源碼在我的個人github ;這博客是記錄我學習的點點滴滴,如果您對 Python、Java、AI、算法有興趣&#xf…

MyBatis復習筆記

3.Mybatis復習 3.1 xml配置 properties&#xff1a;加載配置文件 settings&#xff1a;設置駝峰映射 <settings><setting name"mapUnderscoreToCamelCase" value"true"/> </settings>typeAliases&#xff1a;類型別名設置 #這樣在映射…

如何去除視頻上的文字?免費無痕去水印分享!視頻制作良器!

對于需要進行二次創作的視頻素材&#xff0c;去除原有的文字可以提供一個更加干凈的畫布&#xff0c;方便創作者在其基礎上進行新的創作和編輯。同時&#xff0c;去除文字后的視頻也更方便分享到各種平臺&#xff0c;避免因為平臺對文字的限制而導致視頻無法發布或傳播。 要去除…

Kotlin 標準函數 with、run、apply 的定義和使用

Kotlin 標準函數 with、run、apply 的定義和使用 1. with 函數 定義&#xff1a; with 函數允許你在一個對象的上下文中執行一個 lambda 表達式&#xff0c;而不需要在 lambda 表達式中重復引用該對象。 kotlin.internal.InlineOnly public inline fun <T, R> with(r…

云計算期末復習(1)

云計算基礎 作業&#xff08;問答題&#xff09; &#xff08;1&#xff09;總結云計算的特點。 透明的云端計算服務 “無限”多的計算資源&#xff0c;提供強大的計算能力 按需分配&#xff0c;彈性伸縮&#xff0c;取用方便&#xff0c;成本低廉資源共享&#xff0c;降低企…

python 3.10 install on centos

CentOS 7 安裝 Python 3.10_yum python3.10-CSDN博客

Homebrew安裝mysql之后,啟動和使用MySQL服務:

啟動MySQL服務&#xff1a; brew services start mysql 手動啟動服務&#xff1a; mysql.server start 例如&#xff1a; mysql.server start Starting MySQL .. SUCCESS! 停止 MySQL服務&#xff1a; brew services stop mysql 或者 mysql.server stop 重啟MySQL服務&a…

IDEA使用Maven打包項目的所有的依賴

要使用 Maven 命令將 Spring Boot 項目的依賴打包到 lib 文件夾中&#xff0c;你可以在終端中運行以下命令&#xff1a; mvn dependency:copy-dependencies -DoutputDirectory./lib這個命令會將項目的所有依賴&#xff08;包括運行時依賴&#xff09;復制到當前目錄的 lib 文件…

Windows操作系統基本知識整理

目錄 引言 一、Windows操作系統的發展歷史 1.1 Windows 1.0到Windows 3.0 1.2 Windows 95到Windows Me 1.3 Windows NT到Windows 2000 1.4 Windows XP到Windows 7 1.5 Windows 8到Windows 10 二、Windows操作系統的核心組件 2.1 內核 2.2 文件系統 2.3 圖形用戶界面&…

內網橫向移動小補充 --->PTK

大家別急&#xff0c;我的基于資源的約束性委派攻擊還在寫&#xff0c;這個東西一時半會講不清楚&#xff0c;所以我在這里先來補充一點橫向移動以前沒說好的東西&#xff01;&#xff01;&#xff01; 在更啦&#xff0c;別催啦~~~~ 還記得我之前在內網滲透里面講過這個PTK&a…

亞馬遜云主管馬特·加爾曼面臨壓力,致力于在人工智能領域趕超競爭對手

每周跟蹤AI熱點新聞動向和震撼發展 想要探索生成式人工智能的前沿進展嗎&#xff1f;訂閱我們的簡報&#xff0c;深入解析最新的技術突破、實際應用案例和未來的趨勢。與全球數同行一同&#xff0c;從行業內部的深度分析和實用指南中受益。不要錯過這個機會&#xff0c;成為AI領…

mysql中連接查詢的成本

大家好。上篇文章我們講了mysql中成本的含義以及單表查詢如何計算成本。現在我們接著講講mysql中連接查詢的成本。 在講之前&#xff0c;我們先創建兩張一樣的表single_table和single_table2&#xff0c;并在表中插入10000條數據。在下面的講解中&#xff0c;我們稱single_tab…

java并發工具類都有哪些

Java中的并發工具類包括&#xff1a; CountDownLatch CountDownLatch允許一個或多個線程等待其他線程完成某些操作。它通常用于線程間的同步&#xff0c;例如在一個線程完成其工作后通知其他線程繼續執行。 CyclicBarrier CyclicBarrier是一個同步輔助類&#xff0c;它允許一…

使用@Transactional 注解下,事務失效的場景

前言 Transactional是一種基于注解管理事務的方式&#xff0c;spring通過動態代理的方式為目標方法實現事務管理的增強。 Transactional使用起來方便&#xff0c;但也需要注意引起Transactional失效的場景&#xff0c;本文總結了七種情況&#xff0c;下面進行逐一分析。 一、…