其实java8引入了default默认方法后,接口抽象类的差别被缩小了,所以这个问题的意义就没那么大了,而且实际中我们通常只使用接口
关键的区别有4点:
1.接口中的方法必须被其实现类@override ,而抽象类中的方法子类去extends的时候不必须去@override
2.抽象类可以有抽象跟非抽象方法,接口只能由抽象方法,从java8开始接口也可以有默认和静态方法,那么实现类也可以不用去override该方法了
3.抽象类单继承,接口多继承(可以实现多个)
4.接口可以有final no-final和no-static变量 接口只有静态变量(static final)
详细区别参考秒懂百科:
1.抽象类要被继承 接口要被实现

2.接口只能做方法生命,抽象类中可以做方法声明跟方法实现

3.抽象类定义的变量只能是公共的静态的常量,抽象类中的变量是普通变量

4.接口是设计的结果,抽象类是重构的结果

5.接口的抽象级别最高

6.抽象类可以用具体的方法跟属性(跟普通类一样),接口只能有抽象方法和不可变常量

7.抽象类主要用来抽象类别,接口主要用来抽象功能

本文详细对比了Java8环境下接口与抽象类的主要差异,包括方法覆盖、方法类型、继承特性及变量类型的不同。指出接口侧重于功能抽象,抽象类更注重类别抽象。

被折叠的 条评论
为什么被折叠?



