1 public class Test : Test2//子类 2 { 3 public Test():base() 4 { 5 } 6 7 public Test(int a) : base(a)//将子类构造函数的参数传给父类的构造函数 8 { 9 //..... 10 } 11 12 } 13 14 public class Test2//父类 15 { 16 public int a; 17 18 public Test2() 19 { 20 } 21 22 public Test2(int a) 23 { 24 //..... 25 } 26 }
上面的代码是我们在使用继承时,子类和父类的构造函数的写法。构造方法能否被继承,我觉得应该这样理解:
父类是对子类的抽象,也就是说父类和子类可以合并写成一个类,合并后的类写出来的构造函数,不仅会包含子类的构造函数的内容,还会包含父类的构造函数的内容,所以我觉得这里不能看成是子类继承父类的构造函数,看成是子类调用父类的构造函数应该更合理一些。在继承之后,子类在实例化时,会先调用父类的构造函数,再调用自己的构造函数,和我们不用继承,合并写成一个类的构造函数有异曲同工之妙。所以子类不能继承父类的构造函数。
继承中的构造方法一些特殊规定:
子类的构造方法中必须调用父类的构造方法,且将父类的构造方法写在子类构造方法体的第一行。
若子类构造方法没有显示地调用父类的构造方法,则系统默认调用父类中无参数的构造方法。