Java中super與this關(guān)鍵字的用途及區(qū)別詳解
super關(guān)鍵字
super
是Java中的一個(gè)引用變量,用于引用直接父類對(duì)象。
主要用途:
訪問(wèn)父類的成員變量:當(dāng)子類和父類有同名變量時(shí)
super.variableName;
調(diào)用父類的方法:特別是當(dāng)子類重寫了父類方法時(shí)
super.methodName();
調(diào)用父類的構(gòu)造器:必須在子類構(gòu)造器的第一行
super(); // 或 super(parameters);
this關(guān)鍵字
this
是Java中的一個(gè)引用變量,用于引用當(dāng)前對(duì)象。
主要用途:
引用當(dāng)前對(duì)象的成員變量:解決局部變量與成員變量同名的問(wèn)題
this.variableName = variableName;
調(diào)用當(dāng)前類的方法:明確調(diào)用當(dāng)前類的方法
this.methodName();
調(diào)用當(dāng)前類的構(gòu)造器:必須在構(gòu)造器的第一行
this(); // 或 this(parameters);
作為參數(shù)傳遞:將當(dāng)前對(duì)象作為參數(shù)傳遞
method(this);
super與this的區(qū)別
特性 | super | this |
---|---|---|
引用對(duì)象 | 父類對(duì)象 | 當(dāng)前對(duì)象 |
使用場(chǎng)景 | 主要用于繼承關(guān)系中 | 可用于任何類中 |
調(diào)用構(gòu)造器 | 必須位于子類構(gòu)造器第一行 | 必須位于構(gòu)造器第一行 |
訪問(wèn)權(quán)限 | 只能訪問(wèn)父類可見的成員 | 可以訪問(wèn)當(dāng)前類所有成員 |
鏈?zhǔn)秸{(diào)用 | 不能鏈?zhǔn)秸{(diào)用(super.super 非法) | 可以鏈?zhǔn)秸{(diào)用(this.this 非法) |
靜態(tài)上下文 | 不能在靜態(tài)方法/塊中使用 | 不能在靜態(tài)方法/塊中使用 |
代碼示例
class Parent { String name = "Parent"; void display() { System.out.println("Parent's display"); } } class Child extends Parent { String name = "Child"; Child() { this("Default"); // 調(diào)用本類的另一個(gè)構(gòu)造器 } Child(String name) { super(); // 調(diào)用父類構(gòu)造器 this.name = name; } void display() { System.out.println("Child's display"); } void show() { System.out.println(super.name); // 訪問(wèn)父類的name System.out.println(this.name); // 訪問(wèn)本類的name super.display(); // 調(diào)用父類的display this.display(); // 調(diào)用本類的display } } public class Main { public static void main(String[] args) { Child child = new Child("Test"); child.show(); } }
輸出結(jié)果:
Parent
Test
Parent's display
Child's display
總結(jié)
使用
super
主要是為了在子類中明確訪問(wèn)父類的成員,避免與子類成員混淆使用
this
主要是為了在類內(nèi)部明確訪問(wèn)當(dāng)前對(duì)象的成員,避免與局部變量混淆兩者都可以用于構(gòu)造器調(diào)用,但都必須位于構(gòu)造器的第一行
在靜態(tài)上下文中,兩者都不能使用
到此這篇關(guān)于Java中super與this關(guān)鍵字的用途及區(qū)別詳解的文章就介紹到這了,更多相關(guān)Java中super與this關(guān)鍵字內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Idea Jrebel 報(bào)錯(cuò):Cannot reactivate,offline 
本文主要介紹了Idea Jrebel 報(bào)錯(cuò):Cannot reactivate,offline seat in use,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-06-06idea創(chuàng)建springboot項(xiàng)目(版本只能選擇17和21)的解決方法
idea2023創(chuàng)建spring boot項(xiàng)目時(shí),java版本無(wú)法選擇11,本文主要介紹了idea創(chuàng)建springboot項(xiàng)目(版本只能選擇17和21),下面就來(lái)介紹一下解決方法,感興趣的可以了解一下2024-01-01解決idea update project 更新選項(xiàng)消失的問(wèn)題
這篇文章主要介紹了解決idea update project 更新選項(xiàng)消失的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2021-01-01教你Spring Cloud保證各個(gè)微服務(wù)之間調(diào)用安全性
在微服務(wù)的架構(gòu)下,系統(tǒng)會(huì)根據(jù)業(yè)務(wù)拆分為多個(gè)服務(wù),各自負(fù)責(zé)單一的職責(zé),在這樣的架構(gòu)下,我們需要確保各api的安全性,今天通過(guò)本文給大家分享Spring Cloud中如何保證各個(gè)微服務(wù)之間調(diào)用的安全性,需要的朋友參考下吧2021-08-0823種設(shè)計(jì)模式(12)java模版方法模式
這篇文章主要為大家詳細(xì)介紹了23種設(shè)計(jì)模式之java模版方法模式,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-11-11java調(diào)用webService接口的代碼實(shí)現(xiàn)
本文主要介紹了java調(diào)用webService接口的代碼實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-02-02Java基礎(chǔ)之內(nèi)部類與代理知識(shí)總結(jié)
今天帶大家復(fù)習(xí)Java的基礎(chǔ)知識(shí),文中有非常詳細(xì)的介紹及圖文示例,對(duì)正在學(xué)習(xí)Java的小伙伴們很有幫助,需要的朋友可以參考下2021-06-06