java 建構函式和super
阿新 • • 發佈:2018-12-16
package one; class book { book() {System.out.println("這是沒有引數的父類的構造方法");} book(int i) {System.out.println("有引數 父類的構造方法");} public void get() {System.out.println("book父類");} } class dictionary extends book { dictionary() {System.out.println("子類 無引數 的構造方法哦");} dictionary(int i) {System.out.println("子類 有引數 的構造方法哦");} public void get() //子類覆蓋父類的方法 { System.out.println("子類dictionary."); } public void get(int pages) /*get方法的過載, 過載是 方法名相同,引數表不同*/ { System.out.println("子類dictionary get方法過載."); } public void son() { System.out.println("這是子類新新增的方法,父類沒有哦."); } } public class haha { public static void main(String[] args) { // TODO Auto-generated method stub book a= new book(); System.out.println("-----------------"); book e= new book(123); System.out.println("-----------------"); book b= new dictionary(2);//多型 向上型別轉換 System.out.println("-----------------"); dictionary c=new dictionary(3); System.out.println("-----------------"); dictionary d=new dictionary(); b.get(); c.son(); // b.son(); 此句編譯不通過 /*(程式設計看左邊,執行看右邊)book b= new dictionary(2); 即編譯器看的是引用變數,因為book類裡面沒有son這個方法*/ } }
執行結果
這是沒有引數的父類的構造方法
-----------------
有引數 父類的構造方法
-----------------
這是沒有引數的父類的構造方法
子類 有引數 的構造方法哦
-----------------
這是沒有引數的父類的構造方法
子類 有引數 的構造方法哦
-----------------
這是沒有引數的父類的構造方法
子類 無引數 的構造方法哦
子類dictionary.
這是子類新新增的方法,父類沒有哦.
1 呼叫子類建構函式的時候,會預設先呼叫父類的無引數構造方法,即相當於隱藏了一行程式碼 super();
2.在你程式沒有寫構造方法時候,編譯器會預設幫你寫一個無引數的
例
寫了book(i),而沒有寫book()這種無引數的,編譯器會認為你既然寫了構造函數了,我就不管了,所以不會為你預設新增book() 而子類的建構函式是要先呼叫父類的,預設無引數的建構函式,此時我們因為沒有定義這種,所以報錯。
dictionary()通過super(i)呼叫父類建構函式。編譯成功
dictionary(i)沒有編譯成功,是因為預設 子類建構函式 先呼叫無引數的父類建構函式,super() ,然後因為沒有嘛,所以錯誤。
建構函式的作用 來初始化物件的狀態。