黑马程序员技术交流社区
标题:
子类继承父类时,关于构造函数的问题
[打印本页]
作者:
迷你卡卡
时间:
2013-9-29 20:34
标题:
子类继承父类时,关于构造函数的问题
本帖最后由 迷你卡卡 于 2013-9-29 21:50 编辑
在子类继承父类时,父类中默认的那个构造函数会被子类继承吗?如果在父类中手动添加一个构造函数,将那个默认的构造函数覆盖之后,这个手动添加的构造函数会被继承吗?求大神指教。
作者:
段朝骞
时间:
2013-9-29 20:49
本帖最后由 段朝骞 于 2013-9-29 21:05 编辑
子类不继承父类构造函数,
但是实例化子类时会先调用的是父类空构造函数,再调用子类构造函数
但带参数的构造函数必须使用BASE关键字显示的继承
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace 构造函数继承
{
class Program
{
static void Main(string[] args)
{
B b = new B();
Console.ReadKey();
}
}
class A
{
public A() { Console.WriteLine("A构造函数"); }
}
class B : A
{
public B() { Console.WriteLine("B构造函数"); }
}
}
//打印出结果是 A构造函数 B构造函数
复制代码
作者:
七里香
时间:
2013-9-29 20:50
构造函数不能被继承,子类会自动调用父类的构造函数,如果子类没有定义构造函数那么会自动生成一个不带参数的构造函数,而子类的构造函数会自动调用父类的构造函数(没有参数的构造函数)事例:
public class B:A
{
public B()
{
}
}
相当于
public class B:A
{
public B():base()
{
}
}
如果父类中为带参数的构造函数则要显示调用比如:
public class A
{
public A()
{
}
public A(string str)
{
}
}
public class B:A
{
public B():base("aaa")
{
}
}
作者:
迷你卡卡
时间:
2013-9-29 21:50
七里香 发表于 2013-9-29 20:50
构造函数不能被继承,子类会自动调用父类的构造函数,如果子类没有定义构造函数那么会自动生成一个不带参数 ...
意思是,虽然子类没有继承父类的构造函数,但是子类在使用自己的构造函数的时候,会先去调用父类的那个无参的构造函数,这时如果父类中的那个无参构造函数被覆盖的话就会报错是吧!
我刚才又去查了下资料,如果父类的构造函数被手动添加的构造函数覆盖的话,可以在把那个无参的构造函数手动添加上,这时依然不会报错,如果父类中没有无参数的构造函数,只有一个手动添加的带参数构造函数的话,可以通过 :base 来 调用父类中的那个带参数的构造函数,
依然感谢
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2