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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© .net_交流 中级黑马   /  2014-7-20 18:03  /  2217 人查看  /  13 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 .net_交流 于 2014-7-25 10:37 编辑

如何调用父类构造函数给子类字段赋值

评分

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

查看全部评分

13 个回复

倒序浏览
:base(a,b)
回复 使用道具 举报
1. 在派生类中,如果不使用 base 关键字来显式调用基类构造函数,则将隐式调用默认构造函数(如果有的话)。这意味着下面的构造函数声明在效果上是相同的:
public Manager(int initialdata)
{
    //Add further instructions here.
}
public Manager(int initialdata) : base(a,b)
{
    //Add further instructions here.
}
2. 如果基类没有提供默认构造函数,派生类必须使用 base 显式调用基构造函数。

评分

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

查看全部评分

回复 使用道具 举报
子类从父类继承会继承父类的非私有字段,因此通过在子类构造函数后面加上  :base(参数...),会先调用父类构造函数,这时为父类非私有字段赋值就是为子类字段赋值,也就是说,通过调用父类构造函数给子类字段赋值。

评分

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

查看全部评分

回复 使用道具 举报
_xixi_ 发表于 2014-7-20 19:50
子类从父类继承会继承父类的非私有字段,因此通过在子类构造函数后面加上  :base(参数...),会先调用父类构 ...

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

说的很深入,看了几遍终于明白了,受教了,谢谢你
回复 使用道具 举报
本帖最后由 dugubaitian 于 2014-7-21 08:40 编辑

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

评分

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

查看全部评分

回复 使用道具 举报
正好这块不懂,学习一下
回复 使用道具 举报
就Person类,Stu Tea 那几个子类你多自己写写就好
回复 使用道具 举报
上面几位回答得很详细,很受用
回复 使用道具 举报
我也不懂,正好学习~~
回复 使用道具 举报
学习到了
回复 使用道具 举报
     public  Son( string  name,  decimal  pro,  string  blood)

            :  base (name, pro, blood)

        { }
回复 使用道具 举报
子类对象被创建的时候,一定会调用子类的构造函数,而子类的构造函数默认情况下会去调用父类无参数的构造函数,如果父类没有了无参数的构造函数,那么编译会报错。

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

评分

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

查看全部评分

回复 使用道具 举报 1 0
您需要登录后才可以回帖 登录 | 加入黑马