virtual
- 类中定义的虚方法(虚方法就是virtual修饰的方法)除了辅助实现多态特性,其实它和普通函数没什么区别。基类声明或基类定义(即实现)的虚方法,其派生类可以重写也可不重写;如果派生类不重写基类虚方法,那么派生类实例访问的虚方法是基类中定义的方法
- 在基类中定义了虚方法,并且在派生类中使用override重写了该方法(C++中使用virtual关键字表示要重写虚方法),那么派生类的实例调用中,该虚方法使用的是派生类中重写的方法。
abstract
C#中abstract关键字只能用在抽象类中修饰方法,并且没有具体的实现。抽象方法的实现必须在派生类中使用override关键字来实现。抽象类和C#中的接口interface有着很重要的异同点,这里不再赘述。
总结
- virtual方法在基类中可以实现(若未实现,子类必须为其实现),abstract方法在基类中不可实现;而在派生类中,virtual方法可重写可不重写,abstract方法必须重写。
- 抽象类不可创建实例,只能被继承,由派生类来实例化。
- C#中有函数被声明为abstract,那么必须显式使用用abstract修饰类名。
- C#中派生类重写基类的virtual或abstract方法,记得使用override修饰;C++中派生类重写基类的virtual方法,使用virtual修饰。