黑马程序员技术交流社区

标题: 构造函数 [打印本页]

作者: .net_交流    时间: 2014-7-20 18:03
标题: 构造函数
本帖最后由 .net_交流 于 2014-7-25 10:37 编辑

如何调用父类构造函数给子类字段赋值
作者: 追梦无悔    时间: 2014-7-20 18:36
:base(a,b)
作者: 许庭洲    时间: 2014-7-20 19:06
1. 在派生类中,如果不使用 base 关键字来显式调用基类构造函数,则将隐式调用默认构造函数(如果有的话)。这意味着下面的构造函数声明在效果上是相同的:
public Manager(int initialdata)
{
    //Add further instructions here.
}
public Manager(int initialdata) : base(a,b)
{
    //Add further instructions here.
}
2. 如果基类没有提供默认构造函数,派生类必须使用 base 显式调用基构造函数。

作者: _xixi_    时间: 2014-7-20 19:50
子类从父类继承会继承父类的非私有字段,因此通过在子类构造函数后面加上  :base(参数...),会先调用父类构造函数,这时为父类非私有字段赋值就是为子类字段赋值,也就是说,通过调用父类构造函数给子类字段赋值。
作者: .net_交流    时间: 2014-7-20 21:49
_xixi_ 发表于 2014-7-20 19:50
子类从父类继承会继承父类的非私有字段,因此通过在子类构造函数后面加上  :base(参数...),会先调用父类构 ...

谢谢你,回答的很好理解,帮助很大
作者: .net_交流    时间: 2014-7-20 21:51
许庭洲 发表于 2014-7-20 19:06
1. 在派生类中,如果不使用 base 关键字来显式调用基类构造函数,则将隐式调用默认构造函数(如果有的话) ...

说的很深入,看了几遍终于明白了,受教了,谢谢你
作者: dugubaitian    时间: 2014-7-21 08:36
本帖最后由 dugubaitian 于 2014-7-21 08:40 编辑

这个问题很好理解的!!   
要给子类字段赋值,要么是在子类中直接为其赋值,要么就是子类继承父类后在父类中为其赋值。。。
1、在子类中就不用说了,在构造函数中直接为其赋值
2、在父类中为其赋值就只能通过调用父类的构造函数来执行了  :base()

作者: 乔相坤    时间: 2014-7-21 09:57
正好这块不懂,学习一下
作者: 专属第三    时间: 2014-7-21 10:26
就Person类,Stu Tea 那几个子类你多自己写写就好
作者: 童心    时间: 2014-7-21 10:33
上面几位回答得很详细,很受用
作者: suzhousongkan    时间: 2014-7-21 11:42
我也不懂,正好学习~~
作者: 深夜的空气    时间: 2014-7-21 14:12
学习到了
作者: 天佑の清清    时间: 2014-7-22 17:47
     public  Son( string  name,  decimal  pro,  string  blood)

            :  base (name, pro, blood)

        { }
作者: qsq0000hm    时间: 2014-7-23 07:53
子类对象被创建的时候,一定会调用子类的构造函数,而子类的构造函数默认情况下会去调用父类无参数的构造函数,如果父类没有了无参数的构造函数,那么编译会报错。

如何解决:
1>,可以在父类中重载一个无参数的构造函数
2>,不要让子类的构造函数在默认情况下调用父类的无参数的构造函数,可以调用父类有参数的构造函数。调用方法是:base(父类构造函数参数);





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2