1.如果子類沒有定義構造方法,則調用父類的無參數的構造方法,.
2.如果子類定義了構造方法,不論是無參數還是帶參數,在創建子類的對象的時候,首先執行父類無參數的構造方法,然后執行自己的構造方法。
3.如果子類調用父類帶參數的構造方法,可以通過super(參數)調用所需要的父類的構造方法,切該語句做為子類構造方法中的第一條語句。
4.如果某個構造方法調用類中的其他的構造方法,則可以用this(參數),切該語句放在構造方法的第一條.
說白了:原則就是,先調用父親的.(沒有就默認調,有了就按有的調,反正只要有一個就可以了.)
package test;
class Father{
String s = "Run constructor method of Father";
public Father(){
System.out.println(s);
}
public Father(String str){
s= str;
System.out.println(s);
}
}
class Son extends Father{
String s= "Run constructor method of son";
public Son(){
//實際上在這里加上super(),和沒加是一個樣的
System.out.println(s);
}
public Son(String str){
this();//這里調用this()表示調用本類的Son(),因為Son()中有了一個super()了,所以這里不能再加了。
s = str;
System.out.println(s);
}
public Son(String str1, String str2){
super(str1+" "+str2);//因為這里已經調用了一個父類的帶參數的super("---")了,所以不會再自動調用了無參數的了。
s = str1;
System.out.println(s);
}
}
public class MyClass9 {
public static void main(String[] args){
Father obfather1 = new Father();
Father obfather2 = new Father("Hello Father");
Son obson1 = new Son();
Son obson2 = new Son("hello son");
Son obson3 = new Son("hello son","hello father");
}
}
===============
結果:
Run constructor method of Father
Hello Father
Run constructor method of Father
Run constructor method of son
Run constructor method of Father
Run constructor method of son
hello son
hello son hello father
hello son
|