Java構造器的小事情

 關於子類與父類的構造器的小事情一直不是很瞭解,今天專門抽出空寫幾行代碼,親自搞清楚,這樣印象比較深刻吧.
 首先,構造器是針對類來講的.
 1.任意一個只繼承java.lang類的類.不指定構造器將被由系統自動生成無參的構造器.
比如:

public class Animals(){
}

測試類:

public static void main (String[] args){
    Animals cat = new Animals();
    }

.
.
2.子類的實例化中,會先執行父類無參構造方法,再執行自己的

public class Animals(){
    System.out.println("Animals的構造方法被執行了");
    }
public class Cat extends Animals(){
    }
public static void main(String[] args){
    Cat myCat = new Cat();
    }//結果輸出"Animals的構造方法被執行了"

.
.
.
3.父類的構造器不是 無參構造器 時,系統會擦除默認給定的無參構造器.此時,子類對象無法通過無參構造器實例化父類對象,進而實例化自己,必須也要指定顯式的構造器給子類

public class Animals{
    public Animals( int i){
    System.out.println("i");
        }
    }
//這樣寫會報錯:
//implict super constructor Animals() is undefined for 
//    default  constructor.Must define an explict 
//    constructor
//Cat的默認構造器無法調用Cat父類無參構造方法Animals().必須要爲
//   Cat類顯式調用一個構造器
//implict翻譯成無參構對不?有點尷尬.要是隱式構造器我就呵呵了
public class Cat{
    }

可以看出,主要是父類無參構造器被擦除了.只要有父類有無參構造器,子類便能正常實例化

public class Cat{
    public Cat(){
    //使用super關鍵字,寫入參數.自動進行方法的重載.
    super.(1);
        }
    }
發佈了56 篇原創文章 · 獲贊 6 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章