這篇文章主要介紹了java中this與super關鍵字的使用方法的相關資料,希望透過本文能幫助到大家,讓大家徹底理解應用java中this與super,需要的朋友可以參考下
java中this與super關鍵字的使用方法
這幾天看到類別在繼承時會用到this和super,這裡就做了一點總結,與各位共同交流,有錯誤請各位指正~
this
#this是自身的一個對象,代表對象本身,可以理解為:指向對象本身的一個指針。
this的用法在java中大體可以分為3種:
1.普通的直接引用
這種就不用講了, this相當於是指向當前物件本身。
2.形參與成員名字重名,用this來區分:
class Person { private int age = 10; public Person(){ System.out.println("初始化年龄:"+age); } public int GetAge(int age){ this.age = age; return this.age; } } public class test1 { public static void main(String[] args) { Person Harry = new Person(); System.out.println("Harry's age is "+Harry.GetAge(12)); } }
運行結果:
初始化年龄:10 Harry's age is 12
可以看到,這裡age是GetAge成員方法的形參,this.age是Person類別的成員變數。
3.引用建構子
這個和super放在一起講,見下面。
super
super可以理解為是指向自己超(父)類別物件的一個指針,而這個超類別指的是離自己最近的一個父類。
super也有三種用法:
1.普通的直接引用
與this類似,super相當於是指向目前物件的父類,這樣就可以用super. xxx來引用父類別的成員。
2.子類別中的成員變數或方法與父類別中的成員變數或方法同名
class Country { String name; void value() { name = "China"; } } class City extends Country { String name; void value() { name = "Shanghai"; super.value(); //调用父类的方法 System.out.println(name); System.out.println(super.name); } public static void main(String[] args) { City c=new City(); c.value(); } }
執行結果:
Shanghai China
可以看到,這裡既呼叫了父類別的方法,也呼叫了父類別的變數。若不呼叫父類別方法value(),只呼叫父類別變數name的話,則父類別name值為預設值null。
3.引用建構子
super(參數):呼叫父類別中的某一個建構子(應該是建構子中的第一個語句)。
this(參數):呼叫本類中另一種形式的建構子(應該是建構子中的第一條語句)。
class Person { public static void prt(String s) { System.out.println(s); } Person() { prt("父类·无参数构造方法: "+"A Person."); }//构造方法(1) Person(String name) { prt("父类·含一个参数的构造方法: "+"A person's name is " + name); }//构造方法(2) } /** * Java学习交流QQ群:589809992 我们一起学Java! */ public class Chinese extends Person { Chinese() { super(); // 调用父类构造方法(1) prt("子类·调用父类”无参数构造方法“: "+"A chinese coder."); } Chinese(String name) { super(name);// 调用父类具有相同形参的构造方法(2) prt("子类·调用父类”含一个参数的构造方法“: "+"his name is " + name); } Chinese(String name, int age) { this(name);// 调用具有相同形参的构造方法(3) prt("子类:调用子类具有相同形参的构造方法:his age is " + age); } public static void main(String[] args) { Chinese cn = new Chinese(); cn = new Chinese("codersai"); cn = new Chinese("codersai", 18); } }
執行結果:
父类·无参数构造方法: A Person. 子类·调用父类”无参数构造方法“: A chinese coder. 父类·含一个参数的构造方法: A person's name is codersai 子类·调用父类”含一个参数的构造方法“: his name is codersai 父类·含一个参数的构造方法: A person's name is codersai 子类·调用父类”含一个参数的构造方法“: his name is codersai 子类:调用子类具有相同形参的构造方法:his age is 18
從本例可以看到,可以用super和this分別呼叫父類的構造方法和本類中其他形式的構造方法。
範例中Chinese類別第三種建構方法呼叫的是本類別中第二種建構方法,而第二種建構方法是呼叫父類別的,因此也要先呼叫父類別的建構方法,再呼叫本類中第二種,最後是重寫第三種構造方法。
super與this的異同:
#super(參數):呼叫基底類別中的某一個建構子(應該是建構子中的第一條語句)
this(參數):呼叫本類別中另一種形成的建構子(應該為建構函式中的第一條語句)
super: 它引用目前物件的直接父類別中的成員(用來存取直接父類別中被隱藏的父類別中成員資料或函數,基底類別與衍生類別中有相同成員定義時如:super.變數名super.成員函資料名(實參)
this:它代表目前物件名稱(在程式中易產生二義性之處,應使用this來指明當前物件;如果函數的形參與類別中的成員資料同名,這時需用this來指明成員變數名稱)
呼叫super()必須寫在子類建構方法的第一行,否則編譯不通過。會報錯。方法。建構器,但不能呼叫兩個。會有super語句的存在,所以在同一個建構函式裡面有相同的語句,就失去了語句的意義,編譯器也不會通過。 ()都指的是對象,所以,皆不可以在static環境中使用。一個指向本物件的指標, 然而super是一個Java關鍵字。
以上是Java中this與super關鍵字的詳細介紹的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本文討論了使用Maven和Gradle進行Java項目管理,構建自動化和依賴性解決方案,以比較其方法和優化策略。

本文使用Maven和Gradle之類的工具討論了具有適當的版本控制和依賴關係管理的自定義Java庫(JAR文件)的創建和使用。

本文討論了使用咖啡因和Guava緩存在Java中實施多層緩存以提高應用程序性能。它涵蓋設置,集成和績效優勢,以及配置和驅逐政策管理最佳PRA

本文討論了使用JPA進行對象相關映射,並具有高級功能,例如緩存和懶惰加載。它涵蓋了設置,實體映射和優化性能的最佳實踐,同時突出潛在的陷阱。[159個字符]

Java的類上載涉及使用帶有引導,擴展程序和應用程序類負載器的分層系統加載,鏈接和初始化類。父代授權模型確保首先加載核心類別,從而影響自定義類LOA


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

SublimeText3 Linux新版
SublimeText3 Linux最新版

EditPlus 中文破解版
體積小,語法高亮,不支援程式碼提示功能

PhpStorm Mac 版本
最新(2018.2.1 )專業的PHP整合開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

記事本++7.3.1
好用且免費的程式碼編輯器