一诉濒、super關(guān)鍵字
它是一個指代變量,用于在子類中指代父類對象。
1.作用
- 指代父類對象
- 區(qū)分子父類同名的成員變量惶我,區(qū)分父類中成員變量和子類中同名的局部變量
2.使用
- 與this相同接箫,調(diào)用父類成員變量和成員方法:super.xx super.xxx()
調(diào)用父類構(gòu)造器 super(xxx)
如果子類沒有顯示調(diào)用父類構(gòu)造器,系統(tǒng)會默認在子類構(gòu)造器首行調(diào)用父類空構(gòu)造器
super.屬性名//訪問父類的屬性
super.方法名(參數(shù));//調(diào)用父類的方法片排。
super(參數(shù));//調(diào)用父類的構(gòu)造方法寨腔。
//初始化當前對象的父類型特征
super能出現(xiàn)在實例方法和構(gòu)造方法中,不能使用在靜態(tài)方法中率寡。且大部分情況下可以省略迫卢。
-
super()只能出現(xiàn)在構(gòu)造方法第一行,通過當前的構(gòu)造方法去調(diào)用冶共、"父類"中其它的構(gòu)造方法乾蛤,目的是:代碼復(fù)用(創(chuàng)建子類對象的時候,先初始化父類型特征)比默。
- 建議手動寫無參構(gòu)造方法
- 一個類如果沒有手動提供任何構(gòu)造方法幻捏,系統(tǒng)會默認提供一個無參數(shù)構(gòu)造方法。
- 一個類如果手動提供了一個構(gòu)造方法命咐,那么無參數(shù)構(gòu)造系統(tǒng)將不再提供篡九。
- 重要的結(jié)論:
當一個構(gòu)造方法第一行既沒有this()又沒有super()的話,默認會有一個super()醋奠;表示通過當前子類的構(gòu)造方法調(diào)用父類的無參數(shù)構(gòu)造方法榛臼。所以必須保證父類的無參數(shù)構(gòu)造方法是存在的伊佃。
- 建議手動寫無參構(gòu)造方法
注意:this ()和super()不能共存,它們都是只能出現(xiàn)在構(gòu)造方法第一行沛善。
public class SuperTest {
public int num = 20;
public SuperTest() {
}
public SuperTest(int num) {
this.num = num;
}
public void test(){
System.out.println(num);
}
}
class superSon extends SuperTest{
private int num3 = 20;
public superSon() {
super();
}
public superSon(int num) {
this();//解決 this()和super()不能共存問題
}
}
二航揉、final關(guān)鍵字
表示最終的,不可被修改的金刁。
1.被final修飾的變量為常量(標識符規(guī)范)
可以修飾局部變量也可以修飾成員變量
public class FinalTest {
private final int num = 50;
public void test(){
final int num2 = 20;
}
}
image.png
由圖可見帅涂,在為被final修飾的變量重新賦值時,會報編譯錯誤尤蛮。
2.被final修飾后的方法不能被重寫
public class FinalTest {
public final void test(){
int num2 = 20;
}
}
class FinalSon extends FinalTest{
//報編譯異常媳友,此重寫不可行
/*public void test(){
}*/
}
image.png
3.被final修飾的類不能被重寫
public final class FinalTest {
public void test(){
int num2 = 20;
}
}
class FinalSon extends FinalTest{
}
image.png
由此可見,被final修飾的類产捞,不可被繼承醇锚,所以也稱這種被final修飾的類為“太監(jiān)類”(沒兒子 /狗頭)。