一、抽象类
一个类被标记为abstract,那么这个类就叫做抽象类。关于抽象类有几个特点如下:
- 抽象类无法被实例化;
- 抽象类中的抽象方法没有方法体,和接口中定义的方法相似。
- 如果一个类中定义了抽象方法,那么这个类一定是抽象类。相反,如果一个类是抽象类,在这个类中不一定有抽象方法。
- 如果一个类继承自抽象类,并且抽象类中有抽象方法,那么在子类中必须通过override实现该抽象方法。
- 抽象类中的抽象方法主要用来限制子类必须实现这些抽象方法。当然,如果子类不实行这些抽象方法,那么子类必须被标记为抽象类,由子类的子类去实现。
二、接口
接口是一种行为规范,可以用来定义一组要实现的“功能”,但是不提供具体的实现。关于接口中的注意事项,如下:
- 在接口中定义方法,方法不能有方法体。
- 方法不能有如public、private等的修饰符。
- 接口中定义的方法,在子类中必须都要实现,实现接口中的方法不需要像抽象类一样,使用override修饰符。
- 接口中不能声明变量(字段)。
- 接口中可以定义多个方法,也可以不定义任何方法。
- 类只能有一个父类,但是可以实现多个接口。
- 接口的多态和类型转换和抽象类类似,如能调用声明方法取决于变量的类型,具体调用哪个方法取决于实际指向的对象。