黑马程序员技术交流社区

标题: student类继承person类,构造函数初始化子类student时,为什么先初始化父类 [打印本页]

作者: 王国文    时间: 2012-6-23 22:42
标题: student类继承person类,构造函数初始化子类student时,为什么先初始化父类
C#中子类显示调用父类中的构造函数有什么作用?(有代码参考)一下是我写了一个子类调用父类构造函数的代码,我一直想不明白,子类调用父类中的构造函数有什么有用?既然子类已经继承了父类 那么在调用父类中的构造函数对父类进行初始化有什么意义啊?-----------》纠结中??(没分了!大家多担待啊!谢谢大家了啊!!)
作者: 刘逍遥    时间: 2012-6-23 22:52
因为子类继承父类以后,父类的所有非private的成员子类也就有了,所以初始化子类的时候,必须先实例化父类成员,实例完后,CLR把调用控制权交给子类构造函数,然后实例子类,这是一个层层调用的过程!先找到最低层的然后一层层调用一直到子类
作者: 王国文    时间: 2012-6-23 23:11
刘逍遥 发表于 2012-6-23 22:52
因为子类继承父类以后,父类的所有非private的成员子类也就有了,所以初始化子类的时候,必须先实例化父类 ...

能再说的明白一点吗  怎么要初始化父类   能把你想说的执行的机制画个简图吗
作者: 刘玺    时间: 2012-6-24 18:14
在子类函数进行初始化时,父类的构造函数也会运行.
父类中的数据,子类可以直接获取,所以子类对象在建立时,首先需要查看父类中是如何对这些数据进行初始化的。  因此子类创建对象时需要访问父类的构造函数。
作者: xiaozehope    时间: 2012-6-29 13:53
其实这里不是很难理解的,好比人和中国人,在有中国人之前必定要有人,没有人那就不可能存在中国人。所以想使用子类就一定要找到对应的父类,初始化父类的数据,子类才可以调用。
作者: 黑马李果    时间: 2012-7-3 19:48
子类继承了父类,父类的那些成员当然也属于子类的成员了,初始化子类的时候,当然就要初始其全部成员(虽然有的可能是默认值),子类的构造函数(不包括:base(...))仅仅初始化该子类中新定义的成员,所以需要:base(...)对父类进行初始化,不显式的写出来也可以,只要父类中有默认构造函数。
作者: 肖琦    时间: 2012-7-3 20:22
谈谈个人理解,仅供探讨,如有不对,请指正;
继承只是一个专用名词,说明了子类和父类的关系,两个字不能更深层次的说明什么;
子类和父类是单个的个体,没有包含关系;
子类继承了父类,更直接的说法就是子类可以访问父类的非私有成员;
个人认为,c#语言的设计者通过做继承,为 多态提供了条件,有了多态,变化无穷;
底层实现应该是按先建父类,在建子类的这种方式去走的;

作者: 文硕    时间: 2012-7-3 21:44
在C#中类的继承遵循的规则之一是派生类自然继承基类的成员,但不能继承基类的构造函数成员。但派生类的基类部分成员仍由基类的构造函数完成初始化,所以,创建派生类对象时,会多次调用构造函数。
作者: 王玲星    时间: 2012-7-4 00:37
子类继承了父类,就相当于拥有了父类的一些属性和方法,但是子类中其实根本没有写这些属性和方法。
所以初始化子类是就需要先初始化父类,再初始化你在子类中写的属性和方法,这样才能使用父类的属性和方法




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