学习C# ---阅读Head First第二版 第六章 笔记
第六章 继承(inherit)
通过继承 , 能避免重复代码 , 已更接近实际的方式对现实世界建模 , 最终开发的代码也将更易于维护.
继承避免子类中出现重复代码
如果两个类是某种更一般情况的特点特例 , 就可以吧它们创建为继承同一个类 . 这样一来这两个类都是同一个基类(base) 的子类(subclass)
用动物园的动物来模拟继承
一 , 建立模型 : 从一般到特定
1. 找到动物共同的特点
2. 构建一个基类 , 提供动物共有的全部特点
一个子类改变了所有继承的某个方法时 , 我们称之为覆盖(overriding)
3. 找出各个动物的那些行为与 Animal 类中所有不同 , 后者哪些行为在 Animal 类中更本没有 .
4. 查找有共同特点的类
二 , 创建类层次体系
5. 完成类层次体系
每个子类都会扩展(extending)其基类
新知识 : C# 使用冒号 (:) 表示 继承基类
编写一个类时 , 可以使用一个冒号(:) , 使它继承一个基类 . 这样这个类就成为了一个子类 , 并且得到别继承(基类)的所有字段 , 属性 和 方法.(子类从一个基类继承使基类中所有字段,属性和方法都自动增加到子类)
子类可以覆盖方法改变或特换它继承的方法
1. 为基类中的方法增加 virtual 关键字(子类只能覆盖标志有 virtual 关键字 的方法)
2. 为派生类增加一个同名的方法(这个方法要有完全相同的方法签名 , 这说明返回值和参数都相同 , 而且需要在声明中使用 override 关键字)
小结: 1. 覆盖一个方法之前 , 需要在基类中将这个方法标志位 virtual
2 . 只要能使用基类 , 就可以使用它的某个子类.
3. 只要能使用基类 , 就可以使用它的某个子类
4. 如果一个方法需要父类(基类)作为参数 , 则总是可以传入其子类的实例
子类可以隐藏超类(父类/基类 base)中的方法
如果子类只是增加一个与超类方法同名的方法 , 那么它只是隐藏了超类方法而不是覆盖这个方法
使用不同的引用来调用隐藏的方法
隐藏方法时使用 new 关键字
子类可以使用 base 关键字来访问其基类
注意: 如果基类有构造函数 , 子类也需要有构造函数
例子 :
:base(the base class's parameter list)
在子类构造函数声明的最后增加这行代码 , 告诉C# , 每次实例化子类时都需要调用基类的构造函数 .
基类构造函数在子类构造函数之前执行 .