接口与抽象类的区别

1:两者的设计理念不同:抽象类是一类事物的高度聚合,那么对于继承抽象类的子类来说,对于抽象类来说,属于“是”(is-a)的关系;而接口是定义行为规范,因此对于实现接口的子类来说,相对于接口来说,是“行为需要按照接口来完成”,是like-a的关系。 

2:抽象类表示的是一种继承关系,一个类只能使用一次继承关系。但是,一个类却可以实现多个interface。这弥补了类的多继承问题。 

成员方法

3:抽象类在定义类型方法的时候,可以给出方法的实现部分,也可以不给出;而对于接口来说,其中所定义的方法都不能给出实现部分;只能够有静态的不能被修改的数据成员(也就是必须是static final的)。

4:继承类对于两者所涉及方法的实现是不同的。继承类对于抽象类所定义的抽象方法,可以不用重写,也就是说,可以延用抽象类的方法;而对于接口类所定义的方法或者属性来说,在继承类中必须要给出相应的方法和属性实现。

5:在抽象类中,新增一个方法的话,继承类中可以不用作任何处理;而对于接口来说,则需要修改继承类,提供新定义的方法。

成员变量

6:接口必须是公开的(public)的,不能由私有(private)的方法或变量;
7:接口中的变量必须是public static final(接口中一般不定义数据成员),且必须给其初值,实现类中不能重新定义,也不能改变其值;抽象类可以有私有方法或私有变量,抽象类中的变量默认是 friendly 型,其值可以在子类中重新定义,也可以重新赋值。

原文地址:https://www.cnblogs.com/startover/p/3289203.html