Android(java)学习笔记60:继承中父类 没有无参构造
1. 继承中父类 没有无参构造:
1 package com.himi.test1; 2 3 /* 4 如果父类没有无参构造方法,那么子类的构造方法会出现什么现象呢? 5 报错。 6 如何解决呢? 7 A:在父类中加一个无参构造方法 8 B:通过使用super关键字去显示的调用父类的带参构造方法 9 C:子类通过this去调用本类的其他构造方法 10 子类中一定要有一个去访问了父类的构造方法,否则父类数据就没有初始化。 11 12 注意事项: 13 this(...)或者super(...)必须出现在第一条语句上。 14 如果不是放在第一条语句上,就可能对父类的数据进行了多次初始化,所以必须放在第一条语句上。 15 */ 16 class Father { 17 /* 18 public Father() { 19 System.out.println("Father的无参构造方法"); 20 } 21 */ 22 //如果没有写构造方法,默认有无参构造,这里写了带参构造,无参构造变成了带参构造 23 public Father(String name) { 24 System.out.println("Father的带参构造方法"); 25 } 26 } 27 28 class Son extends Father { 29 public Son() { 30 super("随便给"); 31 System.out.println("Son的无参构造方法"); 32 //super("随便给"); 33 } 34 35 public Son(String name) { 36 //super("随便给"); 37 this(); 38 System.out.println("Son的带参构造方法"); 39 } 40 } 41 42 public class ExtendDemo2 { 43 public static void main(String[] args) { 44 Son s = new Son(); 45 System.out.println("----------------"); 46 Son ss = new Son("林青霞"); 47 } 48 }
运行结果:
这里子类son创建对象的时候,无论它使用无参构造和带参构造,即无论使用new Son(),new Son("林青霞"),这里这些构造方法中默认第一条语句是必须隐式默认是super(),也就是父类的无参构造方法,利用父类的无参构造函数去初始化父类携带的数据,从而提供给子类Son使用。通常父类如果不写构造的话,系统默认父类为无参构造,但是如果父类写了带参构造,那么无参构造就会覆盖掉,这样父类Father()也就没有无参构造了,这样的话前面Son()创建对象时候就会出错。但是也可以显式利用super("name"),调用父类带参构造初始化