关于有参构造函数的继承问题
基础不扎实啊。。。
今天在写代码的时候,父类写了一个有参的构造函数,结果子类怎么写都报错,提示父类不包含采用“0”参数的构造函数。在父类增加一个无参的构造函数之后,确实不报错了,但却不是我想要的处理方式。于是从网上搜了一下,解释是这样的:
类会从下往上延继承关系依次调用父类的无参构造函数。当FatherClass的无参构造函数被注释后,这条通道自然就不存在了,当然会报错。
解决办法很简单,在子类的构造函数中显示调用父类的有参构造函数。下面写了Java和C#对应的写法。
Java正确写法
public class Father {
public Father(int i) {
}
}
class Son extends Father {
public Son(int i) {
super(i);
}
}
C#正确写法
class Father
{
public Father(string s)
{
Console.WriteLine("father said " + s);
}
}
class Son : Father
{
public Son(string s) : base(s) { }
}
参考:
C#类继承中构造函数用法小结