Java——super

在Java中,super關鍵字用于引用父類的成員(屬性、方法或構造器)。它在繼承關系中非常重要,主要用于以下幾種場景:


1. 調用父類的構造器

  • 在子類的構造器中,可以使用super關鍵字調用父類的構造器。
  • super()必須放在子類構造器的第一行。
  • 如果子類構造器中沒有顯式調用super(),編譯器會自動插入對父類無參構造器的調用。
示例:
class Animal {private String name;// 父類構造器public Animal(String name) {this.name = name;System.out.println("Animal constructor: " + name);}
}class Dog extends Animal {private String breed;// 子類構造器public Dog(String name, String breed) {super(name); // 調用父類構造器this.breed = breed;System.out.println("Dog constructor: " + breed);}
}public class Main {public static void main(String[] args) {Dog myDog = new Dog("Buddy", "Golden Retriever");}
}

輸出

Animal constructor: Buddy
Dog constructor: Golden Retriever

2. 訪問父類的成員變量

  • 如果子類和父類有同名的成員變量,可以使用super關鍵字訪問父類的成員變量。
示例:
class Animal {protected String name = "Animal";
}class Dog extends Animal {private String name = "Dog";public void printNames() {System.out.println("Subclass name: " + name); // 訪問子類的nameSystem.out.println("Superclass name: " + super.name); // 訪問父類的name}
}public class Main {public static void main(String[] args) {Dog myDog = new Dog();myDog.printNames();}
}

輸出

Subclass name: Dog
Superclass name: Animal

3. 調用父類的方法

  • 如果子類重寫了父類的方法,可以使用super關鍵字調用父類的原始方法。
示例:
class Animal {public void makeSound() {System.out.println("Animal is making a sound.");}
}class Dog extends Animal {@Overridepublic void makeSound() {super.makeSound(); // 調用父類的方法System.out.println("Dog is barking: Woof! Woof!");}
}public class Main {public static void main(String[] args) {Dog myDog = new Dog();myDog.makeSound();}
}

輸出

Animal is making a sound.
Dog is barking: Woof! Woof!

4. superthis的區別

特性superthis
作用引用父類的成員(屬性、方法、構造器)引用當前對象的成員(屬性、方法、構造器)
調用構造器用于調用父類的構造器(super()用于調用當前類的其他構造器(this()
訪問成員變量訪問父類的成員變量訪問當前類的成員變量
訪問方法調用父類的方法(即使子類重寫了該方法)調用當前類的方法
位置限制必須放在子類構造器的第一行必須放在構造器的第一行

5. 注意事項

  1. super必須在第一行

    • 在構造器中,super()this()必須作為第一條語句,不能同時出現。
    • 如果子類構造器中沒有顯式調用super(),編譯器會自動插入對父類無參構造器的調用。
  2. 父類必須有無參構造器

    • 如果父類沒有無參構造器,子類必須顯式調用父類的有參構造器,否則會編譯錯誤。
  3. super不能用于靜態上下文

    • super關鍵字不能用于靜態方法或靜態代碼塊中,因為靜態成員屬于類,而不是對象。

6. 總結

  • super關鍵字用于在子類中訪問父類的成員(屬性、方法或構造器)。
  • 它在繼承關系中非常重要,尤其是在方法重寫和構造器調用時。
  • 合理使用super可以確保子類正確繼承和擴展父類的功能。

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

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

相關文章

Unity 全局屏幕點擊特效

思路: 1、生成一個點擊特效實例,每點擊屏幕,就調整特效實例的位置并控制特效的顯隱狀態即可。 2、需要注意要保證在編輯器開發時或手機上運行時都要顯示點擊效果。 方案一 (推薦) using UnityEngine; using UnityEn…

什么是業務流程分類框架

業務流程分類框架是一個用于組織和系統化地分類業務流程的結構化方法。它旨在幫助企業理解、管理、分析和改進其運營流程。 可以把它想象成一個圖書館的圖書分類系統,幫助快速找到和理解不同類型的書籍。對于業務流程來說,分類框架幫助快速了解不同類型的…

基于springboot校園健康系統的設計與實現(源碼+文檔)

大家好我是風歌,今天要和大家聊的是一款基于springboot的園健康系統的設計與實現。項目源碼以及部署相關請聯系風歌,文末附上聯系信息 。 項目簡介: 基于springboot校園健康系統的設計與實現的主要使用者管理員具有最高的權限,通…

【Leetcode】平衡二叉樹

平衡二叉樹 題目 思路與代碼實現 常規解法: int max(int a,int b){return a>b?a:b;}int maxDepth(struct TreeNode* root) {if(rootNULL)return 0;return 1max(maxDepth(root->left),maxDepth(root->right)); }bool isBalanced(struct TreeNode* root)…

【AI實踐】阿里百煉文本對話Agent安卓版搭建

環境:安卓手機運行環境;WinsurfAI編程工具;阿里百煉提前創建Agent應用; 耗時:2小時; 1,新建安卓項目 完成文本輸入,并將輸入的文字顯示出來。 2,安裝SDK 參考文檔 安…

一文讀懂Docker之Docker Compose

目錄 一、Docker Compose簡介 二、Docker Compose的安裝和基本使用 1、Docker Compose的安裝 步驟一、下載docker-compose 步驟二、新增可執行權限 步驟三、查看是否安裝成功 2、Docker Compose的基本使用 (1)、docker-compose up (2)、docker-compose ps (3)、docke…

WordPress“更新失敗,響應不是有效的JSON響應”問題的修復

在使用WordPress搭建網站時,許多人在編輯或更新文章時,可能會遇到一個提示框,顯示“更新失敗,響應不是有效的JSON響應”。這個提示信息對于不了解技術細節的用戶來說,太難懂。其實,這個問題并不復雜&#x…

信息學奧賽一本通 1973 【16NOIP普及組】買鉛筆 | 洛谷 P1909 [NOIP 2016 普及組] 買鉛筆

【題目鏈接】 ybt 1973 【16NOIP普及組】買鉛筆 洛谷 P1909 [NOIP 2016 普及組] 買鉛筆 【題目考點】 1. 簡單數學 2. 數組 3. 向上取整 <cmath>中有函數double ceil(double x)&#xff0c;求x向上取整的值。 如果求正整數 ? a b ? \lceil \frac{a}{b} \rceil ?…

C++中的.*運算符

看運算符重載的時候&#xff0c;看到這一句 .* :: sizeof ?: . 注意以上5個運算符不能重載。 :: sizeof ?: . 這四個好理解&#xff0c;畢竟都學過&#xff0c;但.*是什么&#xff1f; 于是自己整理了一下 .* 是一種 C 中的運算符&#xff0c;稱為指針到成…

【JavaEE進階】MyBatis通過注解實現增刪改查

目錄 &#x1f343;前言 &#x1f340;打印日志 &#x1f334;傳遞參數 &#x1f38b;增(Insert) &#x1f6a9;返回主鍵 &#x1f384;刪(Delete) &#x1f332;改(Update) &#x1f333;查(Select) &#x1f6a9;起別名 &#x1f6a9;結果映射 &#x1f6a9;開啟駝…

【分布式理論14】分布式數據庫存儲:分表分庫、主從復制與數據擴容策略

文章目錄 一、分表分庫1. 數據分表的必要性與方式2. 數據分庫原則與優勢 二、主從復制1. 讀寫分離架構設計2. 數據復制方式3. MySQL實現主從復制4. MySQL主從復制實踐與高可用方案 三、數據擴容 隨著業務的不斷發展和數據量的增長&#xff0c;傳統的單機關系型數據庫已經逐漸不…

vxe-grid 通過配置式給單元格字段格式化樹結構數據,轉換樹結構節點

vxe-grid 通過配置式給單元格字段格式化樹結構數據&#xff0c;轉換樹結構節點 比如用戶自定義配置好的數據源&#xff0c;通過在列中配置好數據&#xff0c;全 json 方式直接返回給前端渲染&#xff0c;不需要寫任何格式化方法。 官網&#xff1a;https://vxetable.cn npm i…

延遲任務的11種實現方式(下)!!

接上文&#xff1a; Redisson的RDelayedQueue Redisson他是Redis的兒子&#xff08;Redis son&#xff09;&#xff0c;基于Redis實現了非常多的功能&#xff0c;其中最常使用的就是Redis分布式鎖的實現&#xff0c;但是除了實現Redis分布式鎖之外&#xff0c;它還實現了延遲…

BS5852英國家具防火安全條款主要包括哪幾個方面呢?

什么是BS5852檢測&#xff1f; BS5852是英國針對家用家具的強制性安全要求&#xff0c;主要測試家具在受到燃燒香煙和火柴等火源時的可燃性。這個標準通常分為四個部分進行測試&#xff0c;但實際應用中主要測試第一部分和第二部分&#xff0c;包括煙頭測試和利用乙炔火焰模擬…

如何使用Spark SQL進行復雜的數據查詢和分析

使用Spark SQL進行復雜的數據查詢和分析是一個涉及多個步驟和技術的過程。以下是如何使用Spark SQL進行復雜數據查詢和分析的詳細指南&#xff1a; 一、準備階段 環境搭建&#xff1a; 確保已經安裝并配置好了Apache Spark環境。準備好數據源&#xff0c;可以是CSV文件、JSON…

iOS事件傳遞和響應

背景 對于身處中小公司且業務不怎么復雜的程序員來說&#xff0c;很多技術不常用&#xff0c;你可能看過很多遍也都大致了解&#xff0c;但是實際讓你講&#xff0c;不一定講的清楚。你可能說&#xff0c;我以獨當一面&#xff0c;應對自如了&#xff0c;但是技術的知識甚多&a…

FFmpeg 源碼編譯安裝

參考&#xff1a; https://trac.ffmpeg.org/wiki/CompilationGuide/Ubuntu Linux (Ubuntu) 下載 FFmpeg 源碼&#xff0c;并將其解壓&#xff0c;這里我將它放在 ~/ffmpeg_source 目錄下&#xff1b; cd ~/ffmpeg_sources wget -O ffmpeg-snapshot.tar.bz2 https://ffmpeg.org…

【pytest】編寫自動化測試用例命名規范README

API_autoTest 項目介紹 1. pytest命名規范 測試文件&#xff1a; 文件名需要以 test_ 開頭或者以 _test.py 結尾。例如&#xff0c;test_login.py、user_management_test.py 這樣的命名方式&#xff0c;pytest 能夠自動識別并將其作為測試文件來執行其中的測試用例。 測試類…

Windows桌面系統管理5:Windows 10操作系統注冊表

Windows桌面系統管理0&#xff1a;總目錄-CSDN博客 Windows桌面系統管理1&#xff1a;計算機硬件組成及組裝-CSDN博客 Windows桌面系統管理2&#xff1a;VMware Workstation使用和管理-CSDN博客 Windows桌面系統管理3&#xff1a;Windows 10操作系統部署與使用-CSDN博客 Wi…

llama.cpp將sensor格式的大模型轉化為gguf格式

前言 ollama本地只能導入gguf格式的大模型文件&#xff0c;將safetensors 文件轉化為gguf格式。需要使用 llama.cpp 這個開源工具。以下是使用 llama.cpp 轉換 .safetensors 格式模型到 .gguf 格式的詳細步驟: 1. 首先克隆并編譯 llama.cpp: 克隆項目 git clone https://gi…