第一部分 C#面向对象程序设计
第5章 继承
5.1 构造函数
在创建自己的类时,应当创建构造函数去做初始化工作,可以把参数传到类中,将类中的数据初始化为指定值。
5.3 使用继承
在C#中,使用继承能够从现有的类派生出新类。在新的派生类里,只需要给出新的方法或修改了的方法,其它方法由被继承的基类自动提供。
5.7 virtual和override关键字
如果基类中有一个方法,而想在派生类中覆盖它,应该把基类中的方法声明为virtual,它的含义是,让派生类里具有同样名字和参数标识的方法被调用,而不是调用基类中的方法。然后,在派生类中必须用override关键字声明该方法。
5.9 使用new 替换方法
当不能把基类方法声明为virtual时,另一种取代基类中方法的方式是在派生类中声明方法时使用new关键字。这样做能有效地隐藏基类中同一名字(与参数无关)的方法。在这种情况下,不能在派生类调用基类中的同名方法,而且必须把所有的代码都放在替换方法中。
5.11 接口
接口是一个声明,它规定了一个类要包含的带有指定参数的一系列专门方法。
接口声明公有的签名,但不包含方法主体。
5.12 抽象类
抽象类声明了一个或多个没有实现的方法。如果把一个方法声明为抽象的,也要把类声明为抽象的。
关键字:abstract
5.13 接口和抽象类的比较
创建一个接口就是创建了一个或多个方法的定义,在每个实现该接口的类中必须实现这些方法。系统不会生成任何默认的方法代码,必须自己完成实现过程。接口的优点是它提供了一种让一个类成为两个类的子类的方式:一个是继承,一个来自子接口,如果实现该接口的类漏掉了一个接口方法,编译器会产生错误。
创建一个抽象类就是创建了这样一个基类,它可能有一个或多个完整的、可以工作的方法,但至少有一个方法未实现并声明为抽象的。不能实例化一个抽象类,而必须从它派生出类,这些类包含了抽象方法的实现过程。如果一个抽象类的所有方法在基类中都未实现,它在本质上就等同于一个接口,但限制条件是,一个类不能从它继承,也不能继承其它类层次结构,而使用接口则可以这样做。抽象类的作用是对派生类如何工作提供一个基类定义,允许程序员在不同的派生类中填充这些实现过程。
另一种相关方式是创建带空方法的基类,这些空方法可以保证所有的派生类都能够编译,但是每个事件的默认操作是根本什么都不做。