您的位置:首页 > 编程语言 > Java开发

Java中抽象类与接口区别

2017-12-20 09:18 225 查看
抽象类:抽象类是无法实例化的特殊类。所以问题是为什么我们需要一个不能被实例化的类,抽象类只能是子类(继承自)。换句话说,它只允许其他类继承它,但不能实例化。优点是它为所有子类执行特定的层次结构。简而言之,它是一种契约,它强制所有子类执行相同的层次或标准。

接口:接口不是类,由Interface关键词定义,接口只有方法签名,没有方法实现(8之后支持默认方法)。与抽象类类似,它也是一种契约,用于定义所有子类的层次结构,或者它定义了特定的方法集和它们的参数。它们之间的主要区别是,一个类可以实现多个接口,但只能继承一个抽象类。

属性接口抽象类
多继承一个类可以实现多个接口一个类只能继承一个抽象类
默认实现接口只包含接口签名抽象类可以提供默认实现,子类可以重载抽象类方法
访问修饰符接口默认所有的方法均为public抽象类可以包含protected修饰符
内在 vs 外在接口用以定义类具备的外在能力特征,比如人和车辆都具备可移动的特性,因此他们均可以继承实现IMovable接口。抽象类定义的是类所具备的内在特征,如果应用场景需要定义同一类型的对象,最好使用抽象。
同质性如果应用场景是同一方法的不同实现,那么最好是使用接口如果不同的方法实现需要共享同样的行为或者状态(参考上一章的装饰器模式实例),那么抽象类是首选
速度因为编译器需要确定方法实现类,所以,相对于抽象类,接口通常耗时会更长。
重构代价:功能升级如果我们需要为接口新增一个签名方法,那么我们必须对应修改所有接口实现类,并且为新方法指定方法实现。如果我们需要为抽象类新增方法,我们可以仅在抽象类中指定默认实现,而无须修改所有实现类。
属性与常量接口中不允许定义任何属性抽象类中允许定义属性和常量
https://www.codeproject.com/articles/11155/abstract-class-versus-interface
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: