## **super基本概念:**
super 關鍵字與this類似,this 用來表示當前類的實例,super 用來表示父類。
super 可以用在子類中,通過點號(.)來獲取父類的成員變量和方法。super 也可以用在子類的子類中,Java 能自動向上層類追溯。
父類行為被調用,就好象該行為是本類的行為一樣,而且調用行為不必發生在父類中,它能自動向上層類追溯。
<br>
**super 關鍵字的功能:**
* 調用父類中聲明為 private 的變量。
* 點取已經覆蓋了的方法。
* 作為方法名表示父類構造方法。
<br>
## **調用隱藏變量和被覆蓋的方法:**
```
public class Demo{
public static void main(String[] args) {
Dog obj = new Dog();
obj.move();
}
}
class Animal{
private String desc = "Animals are human's good friends";
// 必須要聲明一個 getter 方法
public String getDesc() { return desc; }
public void move(){
System.out.println("Animals can move");
}
}
class Dog extends Animal{
public void move(){
super.move(); // 調用父類的方法
System.out.println("Dogs can walk and run");
// 通過 getter 方法調用父類隱藏變量
System.out.println("Please remember: " + super.getDesc());
}
}
```
move() 方法也可以定義在某些祖先類中,比如父類的父類,Java 具有追溯性,會一直向上找,直到找到該方法為止。
通過 super 調用父類的隱藏變量,必須要在父類中聲明 getter 方法,因為聲明為 private 的數據成員對子類是不可見的。
## 調用父類的構造方法
在許多情況下,使用默認構造方法來對父類對象進行初始化。當然也可以使用 super 來顯示調用父類的構造方法。
```
public class Demo{
public static void main(String[] args) {
Dog obj = new Dog("花花", 3);
obj.say();
}
}
class Animal{
String name;
public Animal(String name){
this.name = name;
}
}
class Dog extends Animal{
int age;
public Dog(String name, int age){
super(name);
this.age = age;
}
public void say(){
System.out.println("我是一只可愛的小狗,我的名字叫" + name + ",我" + age + "歲了");
}
}
```
**注意:無論是 super() 還是 this(),都必須放在構造方法的第一行。**
**值得注意的是:**
* 在構造方法中調用另一個構造方法,調用動作必須置于最起始的位置。
* 不能在構造方法以外的任何方法內調用構造方法。
* 在一個構造方法內只能調用一個構造方法。
如果編寫一個構造方法,既沒有調用 super() 也沒有調用 this(),編譯器會自動插入一個調用到父類構造方法中,而且不帶參數。?
最后注意 super 與 this 的區別:super 不是一個對象的引用,不能將 super 賦值給另一個對象變量,它只是一個指示編譯器調用父類方法的特殊關鍵字。
- Java自動化測試
- 第一章:Java:基礎內容
- 1.1:Java:Hello Word
- 1.2:Java:熱身
- 1.3:Java:注釋
- 1.4:Java:標識符
- 1.5:Java:常量
- 1.6:Java:基本數據類型
- 1.7:Java:引用類型
- 1.8:Java:String類
- 第二章:Java:運算符
- 2.1:Java:算數運算符
- 2.2:Java:關系運算符
- 2.3:Java:邏輯運算
- 2.4:Java:賦值運算符
- 2.5;Java:三元運算符
- 2.6:Java:位運算符
- 第三章:Java:循環控制語句
- 3.1:Java:for循環
- 3.2:Java:while循環
- 3.3:Java:switch
- 3.4:Java:if else
- 3.5:Java:練習題
- 第四章:Java:函數與全局/局部變量
- 4.1:Java:局部變量
- 4.2:Java:全局變量
- 第五章:Java:方法
- 5.1:Java:初識方法
- 5.2:Java:方法調用
- 5.3:Java:方法重載
- 5.4:Java:構造方法
- 5.5:Java:方法的注意事項
- 第六章:Java:面向對象
- 6.1:Java:小案例
- 6.2:Java:this 關鍵字
- 6.3:Java:super 關鍵字
- 6.4:Java:static 關鍵字
- 6.5:Java:final關鍵字
- 6.6:Java:instanceof 運算符
- 6.7:Java:面向對象之封裝
- 6.8:Java:面向對象之繼承
- 6.9:Java:面向對象之多態
- 第七章:Java:面向對象高級進階
- 7.1:Java:抽象類
- 7.2:Java:Java中String類
- 7.3:Java:interface接口
- 7.4:Java:ArrayList
- 7.5:Java:HashSet
- 7.6:Java:HashMap
- 7.7:Java:反射(reflection)
- 第八章:Java:日志以及異常捕獲
- 8.1:Java:log4j
- 8.2:Java:異常初識基礎
- 8.3:Java:未被捕獲的異常
- 8.4:Java:try和catch的使用
- 8.5:Java:多重catch語句的使用
- 8.6:Java:throws/throw 關鍵字
- 8.7:Java:finally關鍵字
- 8.8:Java:自定義異常
- 第九章:Java:xml and IO
- 9.1:Java:IO基本概念
- 9.2:java:properties
- 9.3:Java:xml基本介紹
- 9.4:Java:xml操作實例
- 第十章:Java:JDBC編程
- 10.1:Java:JDBC介紹
- 10.2:Java:JDBC查詢
- 10.3:Java:JDBC插入
- 10.4:Java:Batch
- 10.5:Java:JDBC連接池
- 第十一章:Java:TestNG
- 11.1:java:TestNG簡介
- 11.2:Java:TestNG小實例
- 11.3:Java:TestNG.xml文件配置
- 11.4:Java:TestNG基本注解
- 11.5:Java:TestNG注解代碼
- 11.6:Java:TestNG預期異常
- 11.7:Java:TestNG忽略測試
- 11.8:Java:TestNG超時測試
- 11.9:Java:TestNG分組測試