JAVA面對對象(三)——Super、static、final關鍵字,staticfinal
Super
使用super關鍵字可以直接調用父類中的構造方法、屬性、普通方法
super調用父類構造方法的操作,與this調用構造方法一樣,語句必須放在子類構造方法的首行
public class Person { //定義父類Person private String name; //定義name屬性 private int age; //定義age屬性 public Person(String name,int age) { //通過構造方法設定name、age this.setName(name); //設定name屬性內容 this.setAge(age); //設定age屬性內容 } public String getName() { //取得name屬性 return name; } public void setName(String name) { //設定name屬性 this.name = name; } public int getAge() { //取得age值 return age; } public void setAge(int age) { //設定age值 this.age = age; } public String getInfo(){ //資訊輸出 return "姓名:"+this.getName()+"; 年齡:"+this.getAge(); }}public class Student extends Person{ private String school; //定義新屬性school public Student(String name, int age, String school) { super(name, age); //調用父類中的構造方法 this.school = school; } public String getSchool() { //取得school屬性 return school; } public void setSchool(String school) { //設定school屬性 this.school = school; } @Override public String getInfo() { //覆寫父類中的方法 return super.getInfo()+" ;學校:"+this.getSchool(); //擴充父類方法 } }public class Demo { public static void main(String[] args) { Student stu = new Student("李四", 25, "北京大學"); System.out.println(stu.getInfo()); //調用覆寫過得方法列印輸出 }}
運行結果:
姓名:李四; 年齡:25 ;學校:北京大學
從上面的程式中可以看出子類中使用super()方法調用了父類中含有兩個參數的構造方法,然後再覆寫了父類中的getInfo()方法,最後輸出內容是被子類覆寫過的內容;
super和this十分類似,都可以調用構造方法、屬性、普通方法。但是也有區別:
| 序號 |
區別點 |
this |
super |
| 1 |
屬性訪問 |
訪問本類中的屬性,如果本類中沒有則從父類中尋找 |
訪問父類中的屬性 |
| 2 |
方法 |
訪問本類中的方法,如果本類中沒有則從父類中尋找 |
直接存取父類中的方法 |
| 3 |
調用構造 |
調用本類構造,必須放在構造方法首行 |
調用父類構造,必須放在子類構造方法首行 |
| 4 |
特殊 |
表示當前對象 |
無概念 |
既然都可以調用構造方法,那麼this和super不可以同時出現,因為都要放在構造方法首行。另外,無論子類如何操作,最終先調用父類中的構造方法
static
static表示“全域”或者“靜態”的意思,用來修飾成員變數或成員方法;被static修飾的成員變數和成員方法獨立於該類的任何對象,也就說他不依賴於任何執行個體的對象,當該類被建立時它們也被建立;因此static對象可以在他的任何對象建立之前訪問,無需引用任何對象
static修飾的成員變數或成員方法習慣上稱作靜態變數或靜態方法可以直接通過類名來訪問,訪問文法為:
類名.靜態方法名(參數列表)
類名.靜態變數名
final
final表示的意思是最終,可以使用final關鍵字聲明類、屬性、方法
- 使用final聲明的類不能有子類
- 使用final聲明的方法不能被子類覆寫
- 使用final聲明的變數即成為常量,常量不可修改
使用final聲明變數時,要求全部字母大寫