子父类中的构造函数的特点:
1.在子类构造对象时,发现,访问子类构造函数时,父类构造函数也运行了。
原因是:在子类的构造函数中第一行有一个默认的隐式语句。 super();
类似于this(); this();调用的是本类的构造函数
2.子类构造函数默认调用的是父类中的空参数构造函数,如果需要调用父类中带参数的构造函数,可以在子类构造函数中定义。如:super(6);
3.如果父类中没有定义空参数构造函数,那么子类的构造函数必须用super明确要调用父类中哪个构造函数。
4.同时子类构造函数中如果使用this调用了本类构造函数时,那么super就没有了,因为super和this都只能定义第一行,所以只能有一个。但是可以保证的是,子类中肯定会有其他的构造函数访问父类的构造函数。
5.Object是所有类的父类。
注意:supre语句必须要定义在子类构造函数的第一行。因为父类的初始化动作要先完成。
例:
1 class Fu 2 { 3 int num ; 4 Fu() 5 { 6 num =10; 7 System.out.println("A fu run"); 8 } 9 Fu(int x) 10 { 11 System.out.println("B fu run..."+x); 12 } 13 } 14 class Zi extends Fu 15 { 16 int num; 17 Zi() 18 { 19 //super();//调用的就是父类中的空参数的构造函数。 20 //类似于this() 调用的是本类的构造函数 21 22 System.out.println("C zi run"+num); 23 } 24 Zi(int x) 25 { 26 this(); 27 // super(x); //如果需要调用父类中带参数的构造函数,可以在子类构造函数中定义。 28 System.out.println("D zi run "+x); 29 } 30 } 31 32 class ExtendsDemo4 33 { 34 public static void main(String[] args) 35 { 36 new Zi(6); 37 } 38 } 39 class Demo//extends Object //Object是所有类的父类 40 { 41 /* 42 43 Demo() 44 { 45 super(); 46 return; 47 } 48 */ 49 }