1: 方法重载 [静态多态性]
1.1) 方法(函数)签名
参数的数量
参数的类型
参数的顺序
1.2) 构造函数重载
2: 继承关系下的方法重载(即重写) [动态多态性]
2.1) 使用 virtual 与override 关键字.
a) 基类不为virtual 的方法,派生类不能使用override 进行重写。
b) override可加可不加意义不同,假如派生类不用override 关键字来声明方法,就不会覆盖基类方法,
它只会成为和基类的方法完全不相关的另一个方法的实现。
c)不能override父类的static方法
2.2) 使用 sealed/partial 关键字.
密封类表示不能继承该类。
密封方法表示不能重写该方法。
[可以覆盖父类的密封方法,与父类中的方法是否为密封的没有关系。]
2.3)
1>: 不能重写父类中的sealed方法.
2>: 不能重写父类中的static 方法.
3>: 子类必须重写父类中的抽象方法.
3: 抽象类/抽象方法 (abstract /override)
定义基类中的抽象方法,则派生类必须重载(重写)该方法。
抽象方法一定属于抽象类,但抽象类不一定要包含抽象方法。
抽象方法不能是私有的,而且抽象方法及其重载方法的访问限制应当相同。
抽象方法不能使用virtual 关键字进行修饰。
抽象类不能是密封或静态的
4: 接口/多重接口
接口中不允许指定任何访问修饰符,(隐式为public)不需要访问修饰符!
接口中不能包含字段
接口和抽象类不能被实例化。
接口的任何派生实现类,都必须实现接口的所有方法!
类不允许多继承,但接口允许多继承!
接口不允许有任何构造函数或字段。
接口成员总是公共的,不能声明虚拟和静态的。
好的编程习惯: 使用接口名作为方法的前缀,这称为“显示接口实现”!
对于明确指定了接口的方法,就不再允许使用修饰符,一律为 public. !
如何理解接口: 接口为“公共契约”
5: 通过接口类引用一个类 (即: 面向接口编程)
总结时注意区分:
1) 方法覆盖、方法重载、方法重写的联系与区别点。
2) 不能同时使用 virtual 和 override 修饰一个方法。
3) 虚拟方法不能是私有的。
4) 对于 interface 、virtual、override、sealed 关键字的理解:
interface: 引入一个方法的名称
virtual: 方法的第一个实现。
override: 方法的另一个实现。
sealed: 方法的最后一个实现。