JAVA中接口的好处

JAVA接口设计的好处

私以为接口是JAVA中一个非常棒的设计,因为C++中允许多重继承导致了二义性问题的出现,而JAVA中的接口正是为了解决多重继承所带来的问题而设计的。接口使我们写代码的方式更加的灵活,但是有很多朋友弄不清抽象类和接口如何选择,这篇文章不会围绕在抽象类和接口如何选择这个问题展开,但我会在文章末尾给出一个小建议告诉大家该如何选择。

接口,在类名前使用interface修饰就是一个接口了,语法十分的简单。我还记得最开始学习的时候在网络上查的资料说只要把接口当做一个比抽象类更加抽象的类就行了,随着学习的深入发现这种言论是十分的糊涂的,并不会让学习者更加的理解,反而会给学习者造成困扰,抽象类和接口是两个完全不同的东西。在面向对象的意义上,接口是“有没有”的关系,抽象类是“是不是”的关系,完全不能够混为一谈,但是实际在工作过程中也并没有很特意去区分,一般都不会使用抽象类,更多的是选择接口,接口带来的好处是十分显而易见的,下面我将借助面向对象中的多态特性来阐述为什么接口会使代码更加的灵活。

image.png

image.png

image.png

image.png

这是一段简单的组合结构,层次十分的清晰。

image.png

使用一个测试主类调用进食方法,结果如下

image.png

很显然输出了预期的结果,但是我并没有在测试主类中new猫或者狗的实例对象然后分别调用它们的进食方法,我在主人类中把宠物进食的方法形参声明为AnimalBehavior,然后调用AnimalBehavior的eat方法,我只需要在主类中传入一个AnimalBehavior的实现类就够了,这里大家应该都明白了,这是向上转型带来的效果,设计模式这本书里讲解了JAVA的接口设计好处,书中的意思是为了享受向上转型带来的好处而设计接口,这句话是非常精辟的,代码的灵活性很大程度上都是依靠向上转型,当然接口的妙用不止如此,随着学习的深入,又会有面向接口编程这种说法了,在Servlet中响应http最原始的接口就是Servlet这个接口(前者的servlet指的是处理http请求的框架,而后者指的是这套框架中的一个接口,这个接口名字就叫servlet),由于框架越来越先进,在使用mybatis持久层框架时我们甚至不需要编写接口的实现类,只需要写接口和配置文件就可以操作数据了,从这些方面接口带来的好处就可见一斑了。由于本人水平有限,能够讲述的也只有这么多,有兴趣的朋友可以百度查询更多的资料。

关于接口和抽象类的选择有一个原则,在一个方法有多种实现方式时就应该设计成抽象类或接口,若不明白如何选择,则优先选择接口。以后我会详细的讲解抽象类和接口该如何选择。

2021.3.29

你可能感兴趣的:(java)