java为什么要使用接口

java为什么要使用接口,java的接口并没有对方法进行实现,继承接口后必须都要实现为什么不直接继承类

1、定义接口有利于代码的规范:对于一个大型项目而言,架构师往往会对一些主要的接口来进行定义,或者清理一些没有必要的接口。这样做的目的一方面是为了给开发人员一个清晰的指示,告诉他们哪些业务需要实现;同时也能防止由于开发人员随意命名而导致的命名不清晰和代码混乱,影响开发效率。
2、有利于对代码进行维护:比如你要做一个画板程序,其中里面有一个面板类,主要负责绘画功能,然后你就这样定义了这个类。可是在不久将来,你突然发现现有的类已经不能够满足需要,然后你又要重新设计这个类,更糟糕是你可能要放弃这个类,那么其他地方可能有引用他,这样修改起来很麻烦。如果你一开始定义一个接口,把绘制功能放在接口里,然后定义类时实现这个接口,然后你只要用这个接口去引用实现它的类就行了,以后要换的话只不过是引用另一个类而已,这样就达到维护、拓展的方便性。
3、保证代码的安全和严密:一个好的程序一定符合高内聚低耦合的特征,那么实现低耦合,定义接口是一个很好的方法,能够让系统的功能较好地实现,而不涉及任何具体的实现细节。这样就比较安全、严密一些,这一思想一般在软件开发中较为常见。

那你想象这样一个应用场景
你需要定义很多个子类,它们共同继承一个公共类,它们最终都必须实现一个方法,以便可以获取子类的一些信息,就比如说子类自身如果序列化之后要占多少个字节这种信息,否则你每定义一个子类,你都需要在switch,case里添加一项,用来判断如果子类是这种类型该如何如何。如果你的子类是自定义控件,也有可能是在你的主窗体里需要手动调用控件的某个方法以传值或刷新之类的操作。
那么你该如何写这个函数呢?
大概也就这么几种方法:
1.在每个子类里定义一个同名函数。
这种方法显然不好,首先是并不强制必须有这个函数,你就有可能忘记定义。而且你的数组类型是父类对象,里面分别放入了不同的子类对象,你该如何调用函数呢,还得反射,很麻烦。
2.在父类里定义一个函数,子类继承后重写
这种方法也不够好,虽然解决了父类可以直接调用子类方法的问题,但是如果子类忘记重写,还是很难检查bug
那么问题来了,如果父类里是个抽象方法,子类不是也必须重写吗
问题是这样一来父类就必须是个抽象类,如果你的父类本身是个用户控件,它就不可以是个抽象类,而且很多时候父类本身也需要被实例化,不可以定义为抽象类。
3.定义一个接口,所有的子类都实现同一个接口
那么如果子类没有函数实现,在编译的时候就会报错,可以保证不会漏写;调用的时候直接将父类强制转换为接口即可调用,也十分方便
而且实现接口的类并不需要必须继承自父类,任何一个类都可以实现相同的接口,这样就更灵活了

接口有利于扩展,继承耦合性比较强

你继承类是为了使用方法,父类中eat方法是吃鱼,但是一个子类想调用eat方法显示吃鱼,另一个子类想要调用eat方法显示吃馒头,那么这个子类还是得重写eat方法,所以父类中的方法其实没什么用,肯定有很多子类需要重写,所以直接变成了抽象方法,父类也变成了接口,接口的好处是规范化,不然的话大家一起写程序你调用eat表示吃某物,我调用别的方法表示吃某物

这个以后接触了设计模式就懂了,其实这都有很多的依据的,比如开闭原则、里氏代换原则、组合、聚合原则种种。
但最终都会到了一个原因上:简便开发、提高效率