復習:名稱
Java繼承,子類實例化時,調用父類的無參構造方法
https://blog.csdn.net/Peng_Hong_fu/article/details/52862300
在類的繼承中,子類的構造方法中默認會有super()語句存在,相當於執行父類的相應構造方法中的語句
如下面代碼:
class Extends_Demo {
public static void main(String[] args) {
Cat c = new Cat(); *//---------------(1)*
System.out.println("-------------------");
Cat c1 = new Cat("花花",4); *//----------------(2)*
}
}
class Animal {
private String color;
private int foot;
public Animal(){
System.out.println("我是父類無參數構造器");
}
public Animal(String color,int foot){
System.out.println("我是父類有參數構造器");
this.color = color;
this.foot = foot;
}
}
class Cat extends Animal{
public Cat(){
super(); *//---------------可以省略*
System.out.println("我是子類無參數構造器");
}
public Cat(String color,int foot){
*//super(color,foot); //---------------(3)*
super(); *//---------------可以省略*
System.out.println("我是子類有參數構造器");
}
}
輸出結果如下:
我是父類無參數構造器
我是子類無參數構造器
-----------------
我是父類無參數構造器
我是子類有參數構造器
請按任意鍵繼續...
main方法中
(1)語句執行的是子類的無參數構造方法,內部默認有super(),代表執行父類無參數構造方法,因此輸出父類無參數構造方法中的語句和子類無參數構造方法中的語句;
(2)語句執行的是子類有參數構造方法,內部也是默認有super(),代表執行父類無參數構造方法,輸出語句是父類無參數構造方法中的語句和子類有參數構造方法中的語句;
若將(3)語句解除屏蔽,則子類有參構造方法中執行super(color,foot)表示執行父類有參構造方法Animal(color,foot),修改后子類:
class Cat extends Animal{
public Cat(){
super(); *//----------------可以省略*
System.out.println("我是子類無參數構造器");
}
public Cat(String color,int foot){
super(color,foot); *//---------------(3)*
*//super();*
System.out.println("我是子類有參數構造器");
}
}
輸出:
我是父類無參數構造器
我是子類無參數構造器
-----------------
我是父類有參數構造器
我是子類有參數構造器
請按任意鍵繼續...
對比后可以知道,super()代表執行父類無參數構造方法內容,super(color,foot)代表執行父類有參數構造方法。
轉載之后的自我總結:
若不加修改的話,子類的構造器里都會有 super() 的方法,所以每個子類的構造器都會自動調用父類的無參構造方法。
本文為轉載收藏
————————————————
版權聲明:本文為CSDN博主「TT海淺」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/u010698072/article/details/51873404