大体区别如下:
抽象类可以提供成员方法的实现细节,而接口中只能存在 public 抽象方法; 抽象类中的成员变量可以是各种类型的,而接口中的成员变量只能是 public static final 类型的; 接口中不能含有构造器、静态代码块以及静态方法,而抽象类可以有构造器、静态代码块和静态方法; 一个类只能继承一个抽象类,而一个类却可以实现多个接口; 抽象类访问速度比接口速度要快,因为接口需要时间去寻找在类中具体实现的方法; 如果你往抽象类中添加新的方法,你可以给它提供默认的实现。因此你不需要改变你现在的代码。如果你往接口中添加方法,那么你必须改变实现该接口的类。 接口更多的为了约束类的行为,可用于解耦,而抽象类更加侧重于代码复用。
同时这里也抛出一个问题:日常SDK开发过程中如果直接更改接口函数可能会导致兼容性问题,一般情况下我们可以如何规避这个问题?