接口与抽象类的一些共同点与区别:
基本共同点与区别:
abstract类和接口都可以有abstract方法,abstract类中也可以有非abstract方法,接口不可以。
abstract类中既可以有常量,也可以有变量,接口中只可以有常量,不能有变量。
理解性共同点与区别:
都不能被实例化;
都是提供给新的类使用的;
新的类只能继承一个抽象类(本质上是“is a”),但是可以实施多个接口(本质上是“like a”);
抽象类的目的是进行类型隐藏,而接口的目的是制定标准;
抽象类是对象的抽象,而接口像是一种行为规范。
具体用法的共同点与区别:
用抽象类来定义允许多个实现的类型,比使用接口有一个明显的优势:抽象类的演化比接口的演化要容易的多。在后续的发行版中,如果希望在抽象类中增加一个方法,只增加一个默认的合理的实现即可,抽象类的所有实现都自动提供了这个新的方法。
类可以实现无限个接口,但仅能从一个抽象(或任何其他类型)类继承,从抽象类派生的类仍可实现接口,从而得出接口是用来解决多重继承问题的。
抽象类当中可以存在非抽象的方法,可接口不能且它里面的方法只是一个声名必须用public来修饰没有具体实现的方法。
抽象类中的成员变量可以被不同的修饰符来修饰,可接口中的成员变量默认的都是静态常量(static fainl)。