日期:2014-05-18  浏览次数:20900 次

菜鸟求教关于继承
class A 
{ public A( ) { Console.WriteLine("A"); } } 
class B:A 
{ public B() { Console.WriteLine("B"); } } 
class Program
 { public static void Main() {
B b = new B(); Console.ReadLine(); } }
为什么答案是A B

------解决方案--------------------
派生类在实例化的时候,会在其构造函数内部添加父类的引用,事先对父类的实例化。
------解决方案--------------------
继承不是什么“爸爸生出儿子、父母把遗产留给子女”这种低级的观念。以前曾经有一本写的不错、编程思路清晰的关于使用.net来讲解有关架构方面知识的书,其中有专门的一章讲解面向对象基本概念中中,竟然以“好爸爸、坏爸爸”、“富人死后把遗产留给阔少、穷人死后把遗产留给乞丐”这类概念来解释,纯粹是这本书中一大败笔。你也可以看看自己读过的好书中有没有类似的败笔。

继承不是指两个个体之间的关系,而是指一个个体有多种身份,而这些身份之间又有抽象化或者具体化的联系。例如白马也是马,电视机也是家电,民工也是劳动者,劳动者也是人,等等,这些纯粹是概念性的,而不是个体之间的联系。对象个体是唯一的,这是不什么“封装、继承、多态”更加重要的面向对象概念。对象唯一性不会随着类型的变化而变化,就好象不管别人怎样给你分类,甚至给你分类为“茶具”,你还是你自己。

那么为什么在程序中调用构造函数就很明显了。构造函数的作用它不是“分配内存单元”这个意思,它只是用来初始化数据值的,而分配内存数据单元之类的工作早在调用构造函数之前就完成了。比如说A中的代码可以为最终这个B类对象中属于A类定义的那部分数据赋初始值,而B类中的代码可以随后为最终这个B类对象中属于B类定义的那部分数据赋初始值,这两个步骤在初始化时缺一不可。