首先,抽象类可以有非抽象方法,但是含有抽象方法的类必须被定义成抽象类。所以抽象类可以为部分方法提供默认实现,避免子类中重复实现它们,而接口不能,接口中只能包括抽象方法。其次,由于抽象类中允许加入具体方法(即非抽象方法),因此向抽象类中添加一个具体的方法,不会对它的子类造成影响。对于接口,一旦公布接口,就必须非常稳定,因为随意在接口中添加抽象方法,会影响到所有实现类,这些实现类要么实现新增抽象方法,要么只能声明为抽象类。最后可以把抽象类看作介于“抽象”和“实现”之间的半成品,抽象类力所能及的完成了部分实现,但还有一些功能有待于它的子类去实现。 |