java接口和抽象类_Java接口和抽象类的区别

抽象类和接口之间的区别是热门的Java面试题。抽象类和接口是Java编程语言的核心部分,如何选择接口或抽象类是每个架构师面临的设计决策。

在前面的文章中,学习了有关java接口和抽象类。

在这篇文章中,我们将了解抽象类和接口之间的区别,以及何时应该在抽象类上使用接口,反之亦然。

抽象类和接口之间的区别主要体现在以下几个方面abstract关键字用于创建抽象类,它也可以与方法一起使用,而interface关键字用于创建接口,不能与方法一起使用。

子类使用extends关键字来扩展抽象类,它们需要提供抽象类中所有声明的方法的实现,除非子类也是一个抽象类而不需要实现。而子类使用implements关键字来实现接口,并且应该为所有声明的方法提供实现。

抽象类可以具有实现的方法,而接口提供绝对抽象,并且不能具有任何方法实现。请注意,从Java 8开始,可以在包含方法实现的接口中创建默认和静态方法。

抽象类可以有构造函数,但接口不能有构造函数。

抽象类具有普通java类的所有功能,除了无法实例化它。可以使用abstract关键字来创建类抽象,但接口是完全不同的类型,并且只能有公共静态最终常量和方法声明。

抽象类方法可以具有访问修饰符作为:public,private,protected,static但是接口方法是隐式公共和抽象的,我们不能使用任何其他访问修饰符和接口方法。

子类只能扩展一个抽象类,但可以实现多个接口。

抽象类可以扩展其他类并实现接口,但接口只能扩展其他接口。

如果它有main()方法,可以运行一个抽象类。但是不能运行接口,因为接口不能有main方法实现。

接口用于定义子类的契约,而抽象类也定义契约,但它可以为子类提供其他方法实现。

上面就是接口和抽象类之间的区别。

使用接口还是抽象类?

如何在接口或抽象类之间进行选择以提供子类的契约是一个设计决策,取决于许多因素。让我们看看何时使用接口,何时使用抽象类。

Java不支持多类级别继承,因此每个类只能扩展一个超类。但是一个类可以实现多个接口。因此,大多数时候,接口是为类层次结构和契约提供基础的不错选择。在接口方面编码也是在java中编码的最佳实践之一。

如果契约中有很多方法,那么抽象类更有用,因为可以为所有子类共有的一些方法提供默认实现。此外,如果子类不需要实现特定的方法,它们可以避免提供实现,但是在接口的情况下,子类必须为所有方法提供实现,即使它没有用,并且实现只是空块。

如果基本契约不断变化,那么接口可能会导致问题,因为我们无法在不更改所有实现类的情况下向接口声明其他方法,使用抽象类可以提供默认实现,并且只更改实际执行的实现类使用新方法。

使用抽象类和接口

大多数时候,使用接口和抽象类是设计系统的最佳方法,例如在JDK中java.util.List是一个包含很多方法的接口,所以有一个抽象类java.util.AbstractList,它为List接口的所有方法提供骨架实现,以便任何子类都可以扩展此类并仅实现所需的方法。

我们应该始终以接口作为基础并定义每个子类应该实现的方法,然后如果有一些方法只应该实现某些子类,可以扩展基接口并使用这些方法创建一个新接口。子类可以选择在基本接口或子接口之间进行选择,以根据其要求实现。如果方法的数量增长很多,那么提供一个实现子接口的骨架抽象类并为子类提供在接口和抽象类之间进行选择的灵活性并不是一个坏主意。

Java 8的接口变化

从Java 8开始,可以在接口中提供方法的实现。可以在接口中创建默认方法和静态方法,并为它们提供实现。这弥补了抽象类和接口之间的差距,现在接口是要走的路,因为可以通过为新方法提供默认实现来进一步扩展它。

¥ 我要打赏

纠错/补充

收藏

加QQ群啦,易百教程官方技术学习群

注意:建议每个人选自己的技术方向加群,同一个QQ最多限加 3 个群。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值