package example;
//在子類構造對象時,訪問子類構造函數時候,父類也運行。
//原因是:在子類的構造函數中第一行有一個默認的隱式語句super();
/*
構造函數不能覆蓋
子類的實例化過程:子類中所有的構造函數默認都不能訪問父類中空參數的構造函數。
通過super();來調用。
為什么子類實例化的時候要訪問父類中的構造函數呢?
是因為子類繼承了父類,獲取到了父類中的內容(屬性),所以在使用父類內容之前,
要先看父類是如何對自己的內容進行初始化的。
所以子類在構造對象時,必須訪問父類中的構造函數。
為了完成這個必須的動作,就在子類的構造函數中加入了super();語句。
如果父類中沒有定義空參數構造函數,那么子類的構造函數必須用super明確要調用
父類中的哪個構造函數。
注意:super();語句必須要定義在子類構造函數的第一行。因為父類的初始化動作
要先完成。
*/
class Fu{
Fu(int x){
System.out.println("fu run");
}
}
class Zi extends Fu{
Zi(){
super(4);//調用的就是父類中的空參數的構造函數
System.out.println("zi run");
}
}
public class ExtendsDemo {
public static void main(String[] args) {
new Zi();
}
}
class Fu{
Fu(){
System.out.println("A fu run");
}
Fu(int x){
System.out.println("B fu run"+x);
}
}
class Zi extends Fu{
Zi(){
super();//調用的就是父類中的空參數的構造函數
System.out.println("Z zi run");
}
Zi(int x){
super(); //輸出的是A和D
System.out.println("D Zi run"+x);
}
}
public class ExtendsDemo {
public static void main(String[] args) {
new Zi(6);
}
}
class Fu{
Fu(){
System.out.println("A fu run");
}
Fu(int x){
System.out.println("B fu run"+x);
}
}
class Zi extends Fu{
Zi(){
super();//調用的就是父類中的空參數的構造函數
System.out.println("Z zi run");
}
Zi(int x){
//super();
super(x);//輸出的是B和D
System.out.println("D Zi run"+x);
}
}
public class ExtendsDemo {
public static void main(String[] args) {
new Zi(6);
}
}