這篇文章給大家介紹this與super怎么在Java中使用,內(nèi)容非常詳細(xì),感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。

一、this
概念:this代表著當(dāng)前對象的引用,也是當(dāng)前函數(shù)所屬對象的引用。直白的說,哪個對象調(diào)用了當(dāng)前函數(shù),this就代表哪個對象。
常見的用法(理論不理解就先參考下面案例)
最常見的情況是是對象的一個屬性或被構(gòu)造器的參數(shù)屏蔽時,如果需要調(diào)用屏蔽的屬性,this就代表哪個對象
this只能在方法內(nèi)使用,表示正在調(diào)用方法的那個對象,但是,如果在方法內(nèi)調(diào)用同一個類的另一個方法,就不必使用this,直接調(diào)用即可,this關(guān)鍵字是能省則省
this和static的關(guān)系:
static方法是類方法,依附于類而不依賴與任何對象,static屬性是指該屬性是類中所有對象所共享的,static方法是類方法,先于任何實(shí)例(對象)存在,static在類加載時就已經(jīng)存在了,但對象是在創(chuàng)建時才生成;方法中使用this關(guān)鍵字它的值是當(dāng)前對象的引用,只能用它調(diào)用屬于當(dāng)前對象的屬性和方法和。但是,this可以調(diào)用static類型的屬性,舉個例子:一個父親是不可能向他還未出生的孩子借錢的,但孩子出生后完全可以找他父親去借錢;
對于一個類中的this,不一定單指這個的對象,也可能是這個類的子類的對象(抽象類里面的this只能是實(shí)際調(diào)用中它的派生類的實(shí)例化對象);
總之:如果new 父類對象的話,父類方法的this指向的是父類,如果new 子類,那么父類方法的this指向的是子類
this關(guān)鍵字也可以用于在構(gòu)造函數(shù)中調(diào)用其他構(gòu)造函數(shù)。但是,只能定義在構(gòu)造函數(shù)的第一行,因為初始化動作要先執(zhí)行
this使用案例
class Student extends Person{
public Student(String name, int age, String nation) {
super(name);
}
}
public class Person{
private String name;
private int age;
private static String nation = "chinese";
public Person(String name) {
this.name = name;
}
public Person(String name, int age) {
//初始化方法必須放到第一行
this(name);
this.age = age;
}
//局部變量name和age屏蔽了name和age屬性,用this進(jìn)行標(biāo)識
public Person(String name, int age,String nation) {
this.name = name;
this.age = age;
//this可以調(diào)用到靜態(tài)屬性
this.nation = nation;
}
public void test(){
System.out.println("測試");
}
public static void test2(){
//靜態(tài)方法內(nèi)不能出現(xiàn)this或super
System.out.println("測試");
}
public void print(){
//調(diào)用類內(nèi)部的方法(toString已重寫)加不加this都行
this.toString();
}
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
public static void main(String[] args) {
//這個this代表的student對象
Student student = new Student("wzh",20,"chinese2");
System.out.println(student.toString());
//這個this代表的是person對象
Person person = new Person("wzh3",20,"chinese3");
System.out.println(student.toString());
//擴(kuò)展,全局變量nation的值最后是chinese3
System.out.println(Person.nation);
}
}結(jié)果:

概念:
super可以理解為“父類的”,super可以在子類中調(diào)用父類的屬性,方法,構(gòu)造器,super關(guān)鍵字和this一樣能省就省;
注意點(diǎn):
1、this和super很像,this指向的是當(dāng)前對象的調(diào)用,super指向的是當(dāng)前調(diào)用對象的父類
2、類加載完畢,創(chuàng)建對象,父類的構(gòu)造方法會被調(diào)用
父類如果重寫了無參構(gòu)造器或者父類中沒有有參構(gòu)造器,那么子類的構(gòu)造方法第一行就是super(),可以省略
class Student extends Person{
//這是默認(rèn)的構(gòu)造器內(nèi)容,寫出來是為了幫大家理解
public Student(){
super();
}
}
public class Person{
private String name;
private int age;
}如果父類中定義了有參構(gòu)造器但沒有顯示寫出無參構(gòu)造器,那么必須通過super調(diào)用父類的有參構(gòu)造函數(shù),如果父類中定義了多個有參構(gòu)造區(qū),那么用super調(diào)用其中一個有參構(gòu)造器即可
class Student extends Person{
public Student(String name, int age) {
//任選一個父類有參構(gòu)造
//super(name, age);
super(name);
}
}
public class Person{
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public Person(String name) {
this.name = name;
}
}3、子類相應(yīng)構(gòu)造創(chuàng)建了一個子類對象,該子類對象還包含了一個父類對象。該父類對象在子類對象內(nèi)部(正如子類的構(gòu)造器無論如何都要通過super調(diào)用父類構(gòu)造器一樣,子類的對象被成功構(gòu)造,那么它的內(nèi)部就會包含父類的對象),證明如下
子類重寫父類的方法后可以通過super調(diào)用到父類的方法
class Student extends Person {
private String name = "wzh3";
@Override
public String getName() {
return "子類" + name;
}
public String getParentName(){
//調(diào)用父類的方法
return super.getName();
}
public static void main(String[] args) {
Student student = new Student();
System.out.println(student.getName());
System.out.println(student.getParentName());
}
}
public class Person{
//protected意味著子類和同一包中可以訪問
protected String name = "wzh";
protected int age = 20;
public String getName() {
return "父類" +name;
}
}輸出結(jié)果

子類獲取到父類的變量
class Student extends Person{
public void parentDisplay(){
System.out.println(super.age + super.name);
}
public static void main(String[] args) {
new Student().parentDisplay(); //輸出結(jié)果:20wzh
}
}
public class Person{
//protected意味著子類和同一包中可以訪問
protected String name = "wzh";
protected int age = 20;
}調(diào)用父類的構(gòu)造器
不再舉例
4、this super只能在有對象的前提下使用,不能在靜態(tài)上下文使用
5、如果一個類沒有基礎(chǔ)任何父類,super還有用嗎?肯定有用,可以調(diào)用Object中的方法
public class Person{
private String name;
private int age;
public void display(){
//通過this或super調(diào)用到了Object的toString();
System.out.println(super.toString());
}
public static void main(String[] args) {
new Person().display(); //輸出為Person@452b3a41
}
}關(guān)于this與super怎么在Java中使用就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學(xué)到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
當(dāng)前名稱:this與super怎么在Java中使用-創(chuàng)新互聯(lián)
分享地址:http://www.chinadenli.net/article22/djdccc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供手機(jī)網(wǎng)站建設(shè)、App開發(fā)、搜索引擎優(yōu)化、網(wǎng)站改版、電子商務(wù)、小程序開發(fā)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)