1. 为什么要用抽象类(abstract)?
因为希望它能继承,但又不希望它能实例化(比如“动物”类实例化是没有意义的)。
2. 构造函数私有化
不希望在其他类中通过 new 实例化一个实例(有些根本不能实例化,比如 Math 类;有些是类中专门提供了返回类对象的公有方法,比如单例模式)
3. 静态
静态 + public:这就构成了全局访问
4. 虚方法 + 方法重写
为了使子类的实例完全接替来自父类的类成员,父类必须将该成员声明为虚拟的。—— 在返回类型前加 virtual 关键字
通常虚拟的是方法,但其实除了字段不能是虚拟的,属性、事件和索引器都可以是虚拟的。
尽管方法可以是虚拟的,但虚方法还是有方法体的,可以实际做些事情。
然后,子类可以选择使用 override 关键字,将父类实现替换为它自己的实现,这就是方法重写。