java接口的意义

Posted ziranxixi

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java接口的意义相关的知识,希望对你有一定的参考价值。

java当中继承一个接口,要重写他的方法的话,那为什么还要多此一举的去实现一个接口呢?

直接把方法写在类当中不就可以了?
就是说去掉类名后面的Implements 接口 ,可以不可以呢?

接口的最主要的作用是达到统一访问,就是在创建对象的时候用接口创建,【接口名】 【对象名】=new 【实现接口的类】,这样你像用哪个类的对象就可以new哪个对象了,不需要改原来的代码,就和你的USB接口一样,插什么读什么,就是这个原理。就像你问的,都有个method1的方法,如果我用接口,我上面就可以one.method1();是吧?那样我new a();就是用a的方法,new b()就是用b的方法
这样不方便吗?
这个就叫统一访问,因为你实现这个接口的类的方法名相同,但是实现内容不同。
另外java用接口还有一个好处,就是java不支持多重继承,但是可以实现多个接口,这个在某种程度上可以看做进行多重继承的一种办法。

首先这样写是肯定没有错误的,在我们初期学期的时候还没有体现到接口的价值。但是当我们在做项目时,运用接口以后会很方便。因为接口里面只有简单的方法的声明。或者一些公用的东西。大家都去实现它的话比每次重新定义要方便很多。
对于接口的作用,在一些小的项目上,很难看出其发挥的优势。这就使一些经常的做小项目的开发人员,做时间久了就感觉不到它有什么好的,有时候写起来还麻烦,干脆不用了。其实,在一些大项目上,接口的作用是发挥地相当的明显的。

比如:如果你开发业务逻辑代码,当你好不容易的实现了它全部的功能,突然用户需求要改,你在修改你代码的同时,调用你代码的其它人也会改,如果代码关联性
强的话,会有很多人都要改动代码,这样一来二去,程序会变得相当的不稳定,而且可能还会出现更多的新Bug,所有人都可能会陷入混乱。

但如果使用接口的话,在你使用它之前,就要想好它要实现的全部功能(接口实际上就是将功能的封装)。确定下这个接口后,如果用户需求变了,你只要重新写它
的实现类,而其它人只会调用你的接口,他不管你是怎么实现的,它只需要接口提供的功能。这样,很可能只需要把你的代码修改就可以了,其他人什么都不用做。
同时:这样做的话,使得开发人员能够分工明确,只要确定下来接口了,就可以同时进行开发,提高开发效率。另外,使用接口还有使用方便,可读性强,结构清晰
等优点。

定义一个接口,可以有多种实现。变量声明为接口变量,调用接口方法,以后切换实现类的时候,原有代码不用修改。

解耦,可扩展这是设计接口的主要原因之一

 

为什么接口可以多继承,而类不可以?

如果有两个父类,两个父类里有一个相同的方法,那么作为子类应该怎么继承这个方法?父类1的还是父类2的?
但是实现多个接口则没问题,因为不管哪个接口,调用的都是同一个实现,因为只有方法名!
而且单继承的目的之一,就是降低复杂度,减少维护难度

继承:描述事物的自然属性和行为的复用。
接口:描述事物的社会属性和行为的复用。

因为继承父类包括实现,继承接口只包括接口,就是这样。
接口定义的是行为,比如走,很多对象都可以实现这个行为
但类定义的是对象的属性和具体行为

class 负责实现, interface负责接口;多继承最麻烦的问题就是冲突, 冲突主要体现在 实现的时序和传入参数, 传出参数这几个方面对于实现来说,父类发生时序问题时,使得语言本身变得无比复杂,而多继承问题在实现本身是可以通过很多方式解决的, 而对于接口来说,传入参数冲突是overload,则不是问题, 只有传出参数这个问题是接口多继承不允许的例如:

public interface IA {
void doSomething();
}
public interface IB {
Integer doSomething();
}
public interface IAB extends IA, IB {

@Override
public void doSomething();

@Override
public Integer doSomething();
}

这种情况编译器会告诉你, IA, IB 接口冲突,是不允许的

以上是关于java接口的意义的主要内容,如果未能解决你的问题,请参考以下文章

java中标记接口的意义何在?为啥没有它们我们就不能继续?

Java接口中的成员变量的意义

Java面试_君哥讲解笔记_java面向对象_3抽象类和接口有什么区别接口是否可以继承接口private修饰的方法可以通过反射访问,那么private的意义是什么_ java类的初始化/执行顺序

java函数式接口意义与场景

java中如何实现序列化,有啥意义

接口和抽象类存在的意义和应用场景的区别