A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 迷你卡卡 于 2013-9-29 21:50 编辑

在子类继承父类时,父类中默认的那个构造函数会被子类继承吗?如果在父类中手动添加一个构造函数,将那个默认的构造函数覆盖之后,这个手动添加的构造函数会被继承吗?求大神指教。

评分

参与人数 1技术分 +1 收起 理由
haxyek + 1

查看全部评分

3 个回复

倒序浏览
本帖最后由 段朝骞 于 2013-9-29 21:05 编辑

子类不继承父类构造函数,
但是实例化子类时会先调用的是父类空构造函数,再调用子类构造函数
但带参数的构造函数必须使用BASE关键字显示的继承
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;

  5. namespace 构造函数继承
  6. {
  7.     class Program
  8.     {
  9.         
  10.         static void Main(string[] args)
  11.         {
  12.             B b = new B();
  13.             Console.ReadKey();
  14.         }
  15.     }
  16.     class A
  17.     {
  18.         public A() { Console.WriteLine("A构造函数"); }
  19.     }
  20.     class B : A
  21.     {
  22.         public B() { Console.WriteLine("B构造函数"); }
  23.     }

  24. }

  25. //打印出结果是  A构造函数  B构造函数
复制代码

评分

参与人数 1技术分 +1 收起 理由
haxyek + 1

查看全部评分

回复 使用道具 举报
构造函数不能被继承,子类会自动调用父类的构造函数,如果子类没有定义构造函数那么会自动生成一个不带参数的构造函数,而子类的构造函数会自动调用父类的构造函数(没有参数的构造函数)事例:
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")
    {
      
    }
}

评分

参与人数 1技术分 +1 收起 理由
haxyek + 1

查看全部评分

回复 使用道具 举报
七里香 发表于 2013-9-29 20:50
构造函数不能被继承,子类会自动调用父类的构造函数,如果子类没有定义构造函数那么会自动生成一个不带参数 ...

意思是,虽然子类没有继承父类的构造函数,但是子类在使用自己的构造函数的时候,会先去调用父类的那个无参的构造函数,这时如果父类中的那个无参构造函数被覆盖的话就会报错是吧!
我刚才又去查了下资料,如果父类的构造函数被手动添加的构造函数覆盖的话,可以在把那个无参的构造函数手动添加上,这时依然不会报错,如果父类中没有无参数的构造函数,只有一个手动添加的带参数构造函数的话,可以通过  :base  来 调用父类中的那个带参数的构造函数,
依然感谢
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马