Java接口是什么

Java接口是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为(功能)。

接口(英语:Interface),在JAVA编程语言中是一个抽象类型(Abstract Type),它被用来要求类(Class)必须实现指定的方法,使不同类的对象可以利用相同的界面进行沟通。接口通常以interface来宣告,它仅能包含方法签名(Method Signature)以及常数宣告(变量宣告包含了 static 及 final),一个接口不会包含方法的实现(仅有定义)。

接口无法被实例化,但是可以被实现。一个实现接口的类,必须实现接口内所描述的所有方法,否则就必须宣告为抽象类(Abstract Class)。另外,在Java中,接口类型可用来宣告一个变量,他们可以成为一个空指针,或是被绑定在一个以此接口实现的对象。

其中一个使用接口的优势是,可以利用他们模拟多重继承,类在JAVA中不允许多重继承,所有在JAVA中的类必须而且仅能有一个父类,而java.lang.Object(JAVA类型系统中最顶层的类型)是唯一一个例外。

JAVA的类可以被实现许多个接口,然而一个接口则无法实现其他的接口。

Java为什么要使用接口

实现具体功能时,接口和实现的类分离。接口定义为XxxService,实现为XxxServiceImpl。接口提供了一个公用的方法提供方。 接口是用来规定子类的行为的。

面向接口编程的好处:

1、根据客户提出的需求提出来,作为接口的;业务具体实现是通过实现接口类来完成的。

2、当客户提出新的需求时,只需编写该需求业务逻辑新的实现类。

3、假如采用了这种模式,业务逻辑更加清晰,增强代码可读性,扩展性,可维护性。

4、接口和实现分离,适合团队协作开发。

5、实现松散耦合的系统,便于以后升级,扩展。

Java接口能实现什么功能呢

在Java语言规范中,一个方法的特征仅包括方法的名字,参数的数目和种类,而不包括方法的返回类型,参数的名字以及所抛出来的异常。在Java编译器检查方法的重载时,会根据这些条件判断两个方法是否是重载方法。但在Java编译器检查方法的置换时,则会进一步检查两个方法(分处超类型和子类型)的返还类型和抛出的异常是否相同。

Java接口本身没有任何实现,因为Java接口不涉及表象,而只描述public行为,所以Java接口比Java抽象类更抽象化。但是接口不是类,不能使用new 运算符实例化一个接口。

如:

x=new comparable(……);//这个是错误来的。

但是可以声明接口变量

Comparable x; //这是允许的。

Java接口的方法只能是抽象的和公开的,Java接口不能有构造器,Java接口可以有public、静态的和final属性。即接口中的属性可以定义为

public static final int value=5;

接口把方法的特征和方法的实现分割开来。这种分割体现在接口常常代表一个角色,它包装与该角色相关的操作和属性,而实现这个接口的类便是扮演这个角色的演员。一个角色由不同的演员来演,而不同的演员之间除了扮演一个共同的角色之外,并不要求其它的共同之处。

接口的定义方式如下

接口的主体包含着抽象方法,但所有方法在接口内(定义上)都是抽象(Abstract)方法,所以abstract的关键字在接口内则不被需要。由于接口代表着一个对外行为的集合,所以任何方法在接口内都是public(公开的)。

接口内的成员皆为静态(static)、final及公开(public),反之,他们可以成为任何类或接口的类型

接口的使用解决类只能单继承的问题,因为一个类可以实现多个接口。

那么Java中要如何去实现一个接口并且在实现他的子类中调用接口中的方法呢?

接口的实现方式

如果一个类实现了一个接口,而没有实现接口的所有方法,则它必须被标注为abstract(抽象类)。一个抽象类的子类必须实现它未完成的方法,假如该项子类仍不会实现接口的所有方法,那么该项子类依然需要被标注为abstract。

接口通常被使用在Java编程语言,用来做回调函数使用[2] 。Java并不允许方法作为参数传递使用,因此,其中一个解决办法则是可以定义一个接口,把这个接口当成方法的参数,以此来使用该项对象的方法签名。

子接口[编辑]

接口可以被延伸为数个不同的接口,可以使用上述所描述的方法,举例来说:

以上的程序片段是合法定义的子接口,与类不同的是,接口允许多重继承,而Predator 及 Venomous 可能定义或是继承相同的方法,比如说kill(Prey prey),当一个类实现VenomousPredator的时候,它将同时实现这两种方法。

有些泛用的Java接口可供参考:

Comparable

拥有一个方法compareTo,用以描述两个对象是否相等,或是其中一个对象大于另外一个对象。泛型允许已经实现的类,其对象可以用来互相比较。

Serializable 是一个marker interface 没有任何接口或是字段,仅有一个空的主体,它被用来表示一个类可以被序列化。它的Javadoc描述了他是如何运作,而且不需要被强制编程。

为了能够向上转型为多个基类型。即利用接口的多实现,可向上转型为多个接口基类型。

java接口的使用

java接口或抽象类都可以使用向上转型,它们用的都是java运行时多态技术,或者叫运行期绑定技术。下面是一个java接口的普遍用法:

结果:

I’m a student.

I’m a teacher.

打开APP精彩内容

点击阅读全文

javq接口_Java为什么要使用接口_java接口怎么使用相关推荐

  1. java 抽象类继承抽象类_Java之继承、抽象类、接口篇

    一.继承(extends) 什么是继承? 继承是对现实生活中的"分类"概念的一种模拟. 狮子拥有动物的一切基本特性,但同时又拥有自己的独特的特性,这就是"继承" ...

  2. java 微信退款接口_java版微信和支付宝退款接口

    本文实例为大家分享了java微信退款接口和支付宝退款接口的具体代码,供大家参考,具体内容如下 1.微信退款接口 相对来说我感觉微信的退款接口还是比较好调用的,直接发送httppost请求即可: /** ...

  3. java怎么给类中的私有变量赋值_Java学习笔记分享 如何理解接口抽象类和关键字...

    不知不觉中,千锋重庆学习Java已经半个月了,同学们感觉受益匪浅.有一个同学本来是软件编程专业基础却是意外的差,什么标识符.变量的命名规则.方法的定义.数组.面向对象的封装.继承.多态,还有接口.抽象 ...

  4. java画板抽象类_java 中的 抽象方法 抽象类 和 接口有啥瓜葛

    文章目录 什么是java中的抽象方法 抽象方法是一种特殊的方法: 它只有声明,而没有具体的实现 例如: abstract void eat(); 上面定义了一个方法 eat() ,有修饰关键词 abs ...

  5. 一个类可以实现多个接口吗_Java入门:基础知识(面向对象:接口)

    接着上一篇的基础知识,今天俺们来学习一下: 面向对象 (万物皆对象) 三大特征(封装.继承.多态) 接口 接口 概述:接口是一种引用数据类型,是方法的'集合',接口的内部主要是定义方法,包含常量.抽象 ...

  6. 实现了某一个接口的匿名类的例子_java中的内部类内部接口详解,一文搞定

    简介 一般来说,我们创建类和接口的时候都是一个类一个文件,一个接口一个文件,但有时候为了方便或者某些特殊的原因,java并不介意在一个文件中写多个类和多个接口,这就有了我们今天要讲的内部类和内部接口. ...

  7. java泛型方法 通配符_Java泛型教程–示例类,接口,方法,通配符等

    java泛型方法 通配符 泛型是Java编程的核心功能之一,它是Java 5中引入的.如果您使用的是Java Collections ,并且版本5或更高版本,则可以肯定使用了它. 将泛型与集合类一起使 ...

  8. 2接口详解_java集合【2】——— Collection接口详解

    一.Collection接口简介 二.Collection源码分析 三.Collection的子类以及子类的实现 3.1 List extend Collection 3.2 Set extend C ...

  9. 接口监控_java应用监控之利用cat接口性能优化,每一次都是血的教训

    之前几篇文章对cat进行了简介.安装部署.代码埋点,今天分享一下如何利用cat帮助我们做接口优化. 为什么要接口性能优化? 1.用户体验差:接口访问速度慢.如果一个页面打开需要好几秒,用户可能在页面没 ...

  10. iterator获取当前元素_java集合【5】——— Iterator接口

    一.`iterator`接口介绍 二.为什么需要iterator接口 三.iterator接口相关接口 3.1 ListIterator 3.2 SpitIterator 四. iterator在集合 ...

最新文章

  1. 六月份收集到比较有营养价值的AI方面的文章
  2. 2018CTF大赛学习
  3. Docker镜像的导入导出
  4. 转:11个实用但你可能不知道的Python程序库
  5. at指令获取网络连接类型_【新手】ESP8266模块 AT指令详解
  6. linux虚拟地址被大量占用,《Linux中为什么要使用虚拟地址》
  7. WEB安全基础-PHP+MySQL实践
  8. ZZULIOJ 1061:顺序输出各位数字
  9. FAMP5.1.0一键安装包,nginx和apache自由切换,拥有WEB控制面板
  10. c语言计蒜客成绩排序,计蒜客 排序后的数组删除重复数字
  11. 微软低头,Chrome 一统浏览器!
  12. Bug管理 Mantis(配置详细)
  13. MySQL基础day05_MySQL数据库的备份与恢复-1-MySQL 5.6
  14. php视频教程打包下载 - 网络上最好的php视频教程
  15. 关掉计算机usb接口,bios中不小心把电脑的USB接口给关闭了,怎么样开启
  16. 生活在同一片土地上,印度人肤色差异为何那么大?
  17. 毕业设计必备案例:Python开发桌面程序——各种版本学生信息管理系统
  18. 实例展示:用css实现网页图片特效
  19. android 内存至少一半,极客修:为什么iPhone比安卓内存小,却更流畅?
  20. MongoDB--Linux下搭建的副本集集群(踩过的坑,血和泪的教训)

热门文章

  1. .Net Core中依赖注入服务使用总结
  2. 使用ASP.NET Core 实现Docker的HealthCheck指令
  3. 在.NET Core中使用Exceptionless分布式日志收集框架
  4. [译]ABP vNext介绍
  5. 基于OIDC(OpenID Connect)的SSO
  6. .NET Core 1.0.1 发布了
  7. 用 Visual Studio Code 在 macOS 上创建首个 ASP.NET Core 应用程序
  8. Flutter之Align
  9. LeetCode之Hamming Distance
  10. Android之SparseArray<E>详解