為什么經常會遇到有的構造函數會有super(),而有的卻沒有,其實super就比如 對數函數,log的底數為10,如果為10 ,我們可寫可不寫,如果不為10,那么我們就要加上底數
-
在子類構造方法中,super();是默認省略的,(super();的作用是繼承父類構造方法)。記住:默認省略不是不存在,而是存在,不過被省略了。
-
因為super();存在,所以如果父類是有參構造方法,那問題就出現了,因為子類的構造過程中必須調用父類的構造方法,如果有參,那么不能省略。就要自己調用父類有參構造方法。
要講super就不能不提this,下面從4個角度講解一下super(需要對比的時候拿this對比一下,加深理解)
1. super關鍵字表示超(父)類的意思。this變量代表對象本身。
2. super訪問父類被子類隱藏的變量或覆蓋的方法。當前類如果是從超類繼承而來的,當調用super.XX()就是調用基類版本的XX()方法。其中超類是最近的父類。
3.調用super() 父類構造函數的時候只能調用在子類構造函數的第一行
4.this只能在類中的非靜態方法中使用,靜態方法和靜態的代碼塊中絕對不能出現this。並且this只和特定的對象關聯,而不和類關聯,同一個類的不同對象有不同的this
1 class Person { 2 protected void print() { 3 System.out.println("The print() in class Person."); 4 } 5 } 6 public class DemoSuper extends Person { 7 public DemoSuper(){ 8 super(); //調用父類的構造方法,而且放第一行,如果不寫,系統自動加 9 } 10 public void print() { 11 System.out.println("The print() in class DemoSuper."); 12 super.print();// 調用父類的方法 13 } 14 public static void main(String[] args) { 15 DemoSuper ds = new DemoSuper(); 16 ds.print(); 17 } 18 }