Java:接口和抽象类是什么,他们有什么区别?

接口

由interface修饰,内部成员,方法都是public

接口可以实现多个

接口中可能会没有方法只是一个声明,类似Serializable

1.8之前

接口中的方法都是需要类实现的

内部变量,方法都是public static final的

1.8之后

default修饰

接口中可以有对象级别的实现方法,

那么多个接口相同方法执行哪个?子类必须实现这个方法

那么子类继承的类和接口中默认方法相同执行哪个?类优先接口

只能public修饰或者不写

static修饰

接口中可以有类级别的实现方法,只能public修饰或者不写

增加一个类定义,所谓的functional interface只有一个抽象方法的接口,建议使用@FunctionalInterface Annotion来标记

使用

对行为的抽象,抽象方法的合计,利用接口可以达到API定义和实现分离的目的

抽象类

使用abstract修饰,类的内部可以有需要子类实现的abstract方法,也可以没有

抽象类只能继承一个

1,抽象方法必须是protected 或者public的

2,抽象类不能用于创建对象

3,子类继承抽象类必须实现抽象方法,如果不实现抽象方法那么子类也要定义成抽象类

使用

可用于基类定义

抽象类、接口的区别

1,抽象可控制子类实现更多细节,只把局部变化给子类。1.8之后的接口能实现默认方法,不过不能控制子类实现更多细节,只能实现公共的默认方法。比如模板方法模式就需要抽象类实现

2,接口可以实现多个,抽象类只能实现一个(要实现多个需要使用内部类的方式)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容