抽象类
之前的类继承,子类可以选择是否要覆写某一个方法,这个时候父类无法对子类做出强制性约定(强制你必须覆写某些方法)。这种时候不会使用类的继承,即在实际开发中很少会继承一个已经完善的类——可以直接使用的类。而是必须要继承抽象类!
因此在进行父类设计的时候优先考虑的一定是抽象类。
定义
抽象方法:使用了 abstract 关键字定义的、且没有方法体的方法
抽象类:抽象方法所在类
即所谓抽象类就是在普通类的基础上追加抽象方法。
abstract class Message { // 定义抽象类private string type ; // 消息类型public abstract string getConnectInfo(); // 抽象方法public void setType(string type) { // 普通方法this.type = type ;}public string getType(){ // 普通方法return this.type ;}
}
使用
抽象类创建完成后,是无法直接通过 new
创建对象的,即“抽象类不是完整的类”。若要使用它,需按照如下原则
- 抽象类必须提供有子类,子类使用 extends 继承一个抽象类;
- 抽象类的子类 (不是抽象类)一定要覆写抽象类中的全部抽象方法;
- 抽象类的对象实例化可以利用对象多态性通过子类向上转型的方式完成;
实际开发(非自悟)
- 抽象类使用很大程度上有一个核心的问题:抽象类自己无法直接实例化;
- 抽象类之中主要的目的是进行过渡操作使用,所以当你要使用抽象类进行开发往往都是在你设计中需要解决类继承问题时所带来的代码重复处理。
抽象类的应用 —— 模板设计模式
抽象类最大的好处是对子类方法的统一管理,二是可以自身提供有一些普通方法并且这些普通方法可以调用抽象方法(这些抽象方法只有在子类提供实现的情况下才能生效)。
父类提供了一个操作的模板,对所有行为规范进行统一处理,即所谓的模板设计模式