2 azraelyouxia azraelyouxia 于 2016.09.09 18:37 提问

JAVA接口的使用与其本质

JAVA接口的本质是什么?应该如何使用接口才是正确的使用方式,这个有点搞不明白。希望有大神帮忙解答一下。

8个回答

u011288271
u011288271   2016.09.09 18:59

使用接口的所要最终目的就是松耦合,程序猿会使用各种方法来达到松耦合的目的。接口可以让你得代码之间的依赖尽可能的小,
依赖小也就是代码之间的影响尽可能小。
关于接口的使用,有一个原则叫:接口隔离原则(Interface Segregation Principle)

接口隔离原则的含义是:建立单一接口,不要建立庞大臃肿的接口,尽量细化接口,接口中的方法尽量少。也就是说,我们要为各个类建立专用的接口,而不要试图去建立一个很庞大的接口供所有依赖它的类去调用。在程序设计中,依赖几个专用的接口要比依赖一个综合的接口更灵活。接口是设计时对外部设定的“契约”,通过分散定义多个接口,可以预防外来变更的扩散,提高系统的灵活性和可维护性。
说到这里,很多人会觉的接口隔离原则跟单一职责原则很相似,其实不然。其一,单一职责原则原注重的是职责;而接口隔离原则注重对接口依赖的隔离。其二,单一职责原则主要是约束类,其次才是接口和方法,它针对的是程序中的实现和细节;而接口隔离原则主要约束接口接口,主要针对抽象,针对程序整体框架的构建。
采用接口隔离原则对接口进行约束时,要注意以下几点:
1. 接口尽量小,但是要有限度。对接口进行细化可以提高程序设计灵活性是不挣的事实,但是如果过小,则会造成接口数量过多,使设计复杂化。所以一定要适度。
2. 为依赖接口的类定制服务,只暴露给调用的类它需要的方法,它不需要的方法则隐藏起来。只有专注地为一个模块提供定制服务,才能建立最小的依赖关系。
3. 提高内聚,减少对外交互。使接口用最少的方法去完成最多的事情。
运用接口隔离原则,一定要适度,接口设计的过大或过小都不好。设计接口的时候,只有多花些时间去思考和筹划,才能准确地实践这一原则。

guwei4037
guwei4037   Ds   Rxr 2016.09.09 18:48

接口跟类一样,是一种引用数据类型。
正确的使用,很简单,掌握好定义、实现即可。
定义比较麻烦,需要有面向对象的思想。
实现是固定的,用implements关键字实现。可以实现多个接口。

u012495573
u012495573   2016.09.09 23:24

接口的使用:
1、接口用interface关键字修饰,接口变量可以被赋值为任何实现该接口的类的对象
2、接口中至少包含一个抽象方法,java8中允许接口中包含default修饰的非抽象方法
3、接口中不可以定义静态方法
4、接口中只能定义静态常量属性,常量默认都有public static final修饰
5、接口不包含构造方法
6、接口中不包含初始化块
接口的本质:
体现的是一种规范。对接口的实现者而言,接口规定了实现者必须向外提供哪些服务;对接口的调用者来说,接口规定了调用者可以调用哪些服务,以及如何调用这些服务。
当一个程序中使用接口时,接口是多个模块间的耦合标准;当在多个应用程序之间使用接口时,接口是多个程序间的通信标准。

oSanYeCao1234567
oSanYeCao1234567   Ds   Rxr 2016.09.10 22:42

上面的回答都很精彩,其实说白了,接口就是定义一组规范,让实现他的类去按照这种规范去实现即可

hl9088
hl9088   2016.09.11 11:43

个人认为接口可以看做一个特殊的类,在使用实现时,可以类比继承,很多知识都是通用的,初学java,不对的还请各位大神指正

u014717036
u014717036   2016.09.12 11:11

接口主要是用来进行定义一些规范和协议,让实现它的类符合规范。

z2140345
z2140345   2016.09.13 11:59

接口对程序具有扩展性。
从应用上举例说明:如果要创建一个线程任务必须继承Thread类,重写run方法;如果该类已有自己的体系(父类),不能继承Thread类,那么可以实现Runnable接口,实现run方法的方式创建线程。再比如Serializable接口的使用,它是一个空接口,但是实现了该接口的类会被标识为可序列化的;诸如此类的例子很多,接口作为程序的必不可少的一种扩展的方式存在。

接口封装了细节,调用层不再关心实现逻辑。
还是Thread类的例子,在Thread类中有一个属性是Runnable target(接口属性),run方法的实现判断如果target不为空则调用target.run,在这里target.run的实现是由实现了Runnable的人封装的业务逻辑。
这段实现代码要注意的点在于在Thread类中,如果target不为空永远是调用接口.run方法,run方法的内部实现与它无关。换个角度想,如果你的应用需要某个业务,是不是可以做到调用层代码不需要变化,如果可以,那么系统的长期维护和需求变更变得更加简单。

接口还有很多其他优点,比如定义了规范、形成了体系、减少了依赖、降低了耦合等等。。这些行为和作用的理解是在长期编码中体会出来的,按照定义很难理解它的妙用,经常看代码、写代码时间长了自然就能有自己的心得了。

apple_5
apple_5   2016.10.17 16:30
  • 接口的概念

接口是从多个相似类中抽象出来的规范,接口不提供任何实现。接口体现的是规范和实现分离的设计哲学。

  • Java8中接口的定义 [修饰符] interface 接口名 extends 父接口1,父接口2... { 零到多个常量定义... 零到多个抽象方法定义... 零到多个内部类、内部接口、内部枚举定义... 零到多个默认方法或类方法定义(Java8)... } 修饰符可以是public或者省略

接口中可以包含的成员(接口中不能包括静态方法和初始化块):

  1. 成员变量(只能是静态常量),默认和指定都只能用 public static final修饰,接口里没有构造器和初始化块,所以只能在定义时指定默认值
  2. 方法(只能是抽象实例方法、类方法或默认方法):

    普通方法使用 public abstract修饰,且不能有方法体;

    默认方法必须有方法体,必须用default修饰,不能用static修饰;系统还会为默认方法指定public修饰符;需要用接口实现类的实例调用

    类方法必须有方法体,必须用static修饰;系统还会为默认方法指定public修饰符;可直接使用接口来调用

  3. 内部类(包括内部接口和枚举) 默认使用public static修饰

  • 接口的继承

多继承

  • 使用接口 接口不能用于创建实例,但接口可以用于声明引用类型变量 当使用接口来声明引用类型变量时,这个引用类型变量必须引用到其实现类的对象

接口的主要用途:
1. 定义变量,也可用于强制类型转换
2. 调用接口中定义的常量
3. 被其他类实现

一个类可以继承一个父类,并同时实现多个接口,implements必须放在extends后面

一个类最多只能有一个直接父类,包括抽象类;但一个类可以实现多个接口

接口不能显示继承任何类,但所有接口类型的引用变量都可直接赋给Object类型的引用变量,这是利用向上转型实现的

jiushilzh
jiushilzh 大佬
5 个月之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
澄清Java语言接口与继承的本质
计算机学院研二的兄弟与我讨论Java,一见面,几个问题全是关于接口,接口有什么用?为什么要用接口?什么时候该使用接口?很庆幸他们不是问我Java如何连接SQL Server,或者是如何开发J2EE应用,这类问题有杀伤力,避之则吉。今年计算机学院本科有个毕业设计课题是做J2ME,选这个题目的学生在5月末都还在苦着脸研究java.util.*这个包,这个这个……唉。  大多数人认为,接口的意义在于
java中抽象类与接口的最本质的区别
今天看了篇文章就讲这个的,作者意思是本质区别是接口类是抽象类的抽象,我不认同。 我认为在java的设计意图中,抽象类是作为类的抽象,它注重这个东西是什么,但接口是能力的抽象,它不注重一个对象是什么,而是能干什么,这才是两者的本质区别。 java中一个类最多只能继承一个抽象类但可以实现多个接口,也就是说java的世界里,一只野鸡(具体类)就只能是鸡(抽象类)而不能是鸭子(另一个抽象类),但这只野鸡可
论接口与抽象类的真正区别 抽象类跟接口的本质区别在于,抽象类是为了重用,接口是为了解耦。
关于接口与抽象类的区别, 有着千篇一律的答案,我就不重复那些了, 什么可以实现多个接口,但只能继承一个类;抽象类中可以有方法是的实现,而接口没有, 等等......        那都没有说错,但没有说的问题的关键. 为什么接口跟抽象类有那些不同, 这些不同的根源是什么? 根源是它们的真正含义,或说作用是截然不同的. 不同在哪里? 一言以辟之, "抽象类是为了把相同的东西提取出来,
java接口的本质---学习日志
接口本质上就是一种类。而且是特殊的抽象类。这也是为何可以省略abstract关键字的原因。就好像水管的接口一样。必须定义一样的标砖,才能接上,不然就容易漏水。更多的是为了多种类之间进行数据的交流。也是为了多个团队,多个程序员之间能够进行无缝连接。 而且也因为java只支持单继承。可现实却是存在多继承,就好比父子,一个儿子却是只能有一个爹,但是也可以有一个母亲。而且继承不一定是受血缘的限制。可
JAVA入门-接口-语法
Java语言接口与继承的本质 java 语法
定义注解接口
遇到一个Java题 定义一个注解来实现人名的长度限制,题目如下:  In a web application, wewant to make sure length of person name is less than 100 characters. Pleasedefine an annotation interface and demo how you will use it to l
抽象类和接口的本质区别
1.抽象类是一个不完全的类,需要进一步专业化.接口只是一个行为的规范或规定;       2.接口基本上不具备继承的任何具体特点,它仅仅承诺了能够调用的方法;       3.一个类一次可以实现若干个接口,但是只能扩展一个父类       4.接口可以用于支持回调,而继承并不具备这个特点.               如果预计要创建组件的多个版本,则创建抽象类。抽象类提供简单易行的方法来控制组件版
【Java编程的逻辑】接口的本质 & 抽象类
接口的概念 接口声明了一组能力,但它自己并没有实现这个能力,它只是一个约定。 Java8和Java9对接口的增强 Java8允许在接口中定义两类新方法:静态方法和默认方法 public interface IDemo { // 常规抽象方法 void hello(); // 静态方法 public static void test() { ...
C++中this指针的本质
一直以来对C++中的this不理解,只知道在构造函数中,如果构造函数的参数和类成员的名字一样的话,就可以用this指针来区分,如:this->a = a;一直以来都有这个疑问:this究竟是什么?我们明明没有定义这个this,但是我们可以直接用而编译器不会报错。今天来解决这个疑问。 从刚才的代码中,我们用”this->”而不是”this.”就说明this是一个指针,而我们知道,在C、C++中,指针
一句话总结Java的接口回调机制
接口回调机制