一、this
this關鍵字只能用在方法的方法體內。當一個對象創建后,JVM就會給這個對象分配引用自己的指針,這個指針的名字就叫做this。也正因為如此,this只能用在非靜態方法中。并且this只和特定的對象關聯,而不和類關聯,所以看到this就表示調用這個方法的對象。同一個類的不同對象有不同的this,雖然都是this,但是含義是不同的。
“this是指向對象本身的一個指針”。
1、訪問成員變量
方法參數或者方法中的局部變量和成員變量同名的情況下,成員變量被屏蔽,此時要訪問成員變量則需要用“this.變量名”的方式來引用變量。但是,在沒有同名的情況,可以直接用成員變量的名字,而不用this,用了也是正確的。
public class Test{
private String username;
private String password;
public Test(String username, String password){
//成員變量和參數同名,成員變量被屏蔽,用"this.成員變量"的方式訪問成員變量.
this.username = username;
this.password = password;
}
}
2、調用當前類的構造方法
通過this調用本類中另一個構造方法,用法是this(參數列表),這個僅僅在類的構造方法中可以用,并且只能放在類的構造方法的方法體的第一句。別的地方不能用。一般會在參數多的構造函數里面去用this調用參數少的構造函數。
public class Test{
private String username;
private String password;
public Test(String username, String password){
//成員變量和參數同名,成員變量被屏蔽,用"this.成員變量"的方式訪問成員變量.
this.username = username;
this.password = password;
}
public Test(String name){
this(name, "空");
//相當于給了兩個參數(其中一個參數已經定了,另一個參數在這個構造方法傳入)。
}
}
3、在方法中,需要引用該方法所屬類的當前對象的時候,直接用this。
二、super
1、在子類的構造方法中要調用父類的構造函數,用“super(參數列表)”的方式調用,注意“super(參數列表)”這條語句只能放在子類構造方法的方法體的第一句。
public class TestFirst{
public Test(String username, String password){
super(username,password);
}
}
2、當子類方法中的局部變量或者子類的成員變量與父類的成員變量同名時,也就是子類局部變量或者子類的成員變量覆蓋了父類的成員變量時,用“super.成員變量”引用父類的成員變量。當然父類的成員變量沒有覆蓋,也可以用“super.成員變量名”來引用父類的成員變量。
3、如果子類重寫了父類的某一個方法,即子類和父類有相同的方法定義,但是有不同的方法體,此時,我們可以通過"super.成員方法名"來調用父類里面的這個方法。