1、Java接口和Java抽象类最大的一个区别,就在于Java抽象类可以提供某些方法的部分实现,而Java接口不可以,这大概就是Java抽象类唯一的优点吧,但这个优点非常有用。
如果向一个抽象类里加入一个新的具体方法时,那么它所有的子类都一下子都得到了这个新方法,
而Java接口做不到这一点,如果向一个Java接口里加入一个新方法,所有实现这个接口的类就无法成功通过编译了,
因为你必须让每一个类都再实现这个方法才行,这显然是Java接口的缺点。
2、一个抽象类的实现只能由这个抽象类的子类给出,也就是说,这个实现处在抽象类所定义出的继承的等级结构中,而由于Java语言的单继承性,
所以抽象类作为类型定义工具的效能大打折扣。
在这一点上,Java接口的优势就出来了,任何一个实现了一个Java接口所规定的方法的类都可以具有这个接口的类型,
而一个类可以实现任意多个Java接口,从而这个类就有了多种类型。
3、从第2点不难看出,Java接口是定义混合类型的理想工具,混合类表明一个类不仅仅具有某个主类型的行为,而且具有其他的次要行为。
4.接口可以把“做什么”和“怎么做”分离开来。这给Java带来了很多好处。
虽然代码量增加了,可我们的程序的可维护性加强了。我们的程序是可以拆分的。
5.类主要是定义一个“本质属性”,接口主要是强调一个“特性动作”。接口具有多态性,即B1和B2都继承A类,两者需要加法,但是B1是虚数加,B2是实数加,那么应该为其添加一个加法接口,各自在类中作具体实现。如果是B2继承B1,在B2中重写B1的加法,那样的话B2中会存在多个加法的版本,即B2的实数加和父类B1的虚数加。继承多了之后,很可能因为版本过多而混乱或者出错。
参考文章: