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

