从学习了Java到现在差不多一年多了,中途穿插学了各种语言,这么久都没太用到接口,很让人惊讶,在最近看《深入Java虚拟机》的一个小知识点时(类的加载),看到一个例子,一个接口竟然能够直接通过 “接口名.接口成员变量” 来调用进行使用。我很惊讶!!为什么能直接调用,开始我还以为书写错了。最后才知道,我把我的知识都还给老师了 :( 不开心。。。

接口类型的定义类似于类的定义

接口定义的形式如下:

[修饰符 ] interface 接口名 [extends] [ 接口列表 ]
{
接口体
}

像类那样,编译好的接口被保存在 class二进制文件中。

1.接口说明

  • interface 前的修饰符是可选的。当没有修饰符的时候,表示此接口的访问只限于同包的类。
  • 如果使用修饰符,则只能用 public 修饰符,表示此接口是公有的,在任何地方都可以引用它,这一点和类是相同的。
  • 接口说明中的 extends 关键词和类说明中的 extends 一样,用来定义直接的父接口。和类不同,一个接口可以继承多个父接口,当 extends 后面有多个父接口时,它们之间用逗号隔开,例如,下面是一个最简单的接口说明:public interface boy extends person, man

2. 接口体
接口体就是用大括号括起来的那部分。接口体说明接口的成员,包括常量和抽象方法。

interface boy
{ final int MAX=50;void increment( );void decrement( );int currentcount( );
}

像类一样,接口可以有两种成员:成员变量和成员方法。

(1)接口中的成员变量

  • 接口中所有的成员变量都隐含的是 public 、static、final 的,因此接口中的成员变量都是静态最终变量。

在接口中成员变量声明的形式如下:
[修饰符 ] 类型名 变量名列表;
例如,在接口中有下面这行代码: “int i=5; ” 等同于: “public static final int i=5; ”

(2)接口中的方法

  • 接口中说明的方法都是抽象方法,其声明的形式为: [修饰符 ] 方法返回值类型 方法名(参数列表);
  • 由于接口中的方法都是抽象方法, 所以方法体仅仅有一个分号 “ ; ” (连“{” 和“}”都没有)。
  • 修饰符可选,它只能是 public 和 abstract。权限修饰符只能是public
  • 接口中的所有方法都隐含的是 public 和 abstract 的,接口的方法不能是带static、final 等其他修饰符的

3. 接口的实现

  • 接口的声明仅仅给出了抽象方法,而具体地实现接口所定义的方法需要某个类为接口中的每个抽象方法定义具体的操作。

  • 在类的声明部分,用 implements 关键字来声明这个类实现某个接口,一个类可以实现多个接口,在 implements子句中用逗号隔开。

  • 如果实现某接口的类不是 abstract 修饰的抽象类,则必须在类的定义部分实现指定接口的所有抽象方法,即为所有抽象方法定义方法体,而且,方法头部分应该与接口中的定义完全一致,即有完全相同的返回值和参数列表
  • 如果实现某接口的类是 abstract 修饰的抽象类,则它可以不实现该接口的所有方法。但是,在这个抽象类的任何一个非抽象的子类中,都必须有它们父类所实现的接口中的所有抽象方法实现的方法体。这些方法体可以来自抽象的父类,也可以来自子类自身。但是不允许存在未被实现的接口方法,这主要体现了非抽象类中不能存在抽象方法的原则。
  • 一个类在实现某接口的抽象方法时,必须使用完全相同的方法头。如果所实现的方法与抽象方法有相同的方法名和不同的参数列表,则只是在重载一个新方法,而不是实现已有的抽象方法。
  • 接口的抽象方法的访问控制符都已被指定为叫 public,所以类在实现这些抽象方法时,必须显式地使用 public 修饰符,否则将被警告为缩小了接口中定义的方法的访问控制范围。

如:

interface interCalArea
{ double PI=3.14159;double cal(double r);
}
public class CalArea implements interCalArea
{ public double cal(double r){ return PI*r*r;}public static void main(String[] args) {CalArea CA=new CalArea();System.out.println("Area="+CA.cal(12.0));}
}

最后再多说一句:
抽象类和平常我们写的类差不多,只是抽象类不能够被实例化,能够写抽象方法。同时抽象类能够写静态方法,静态成员变量,能够被直接调用。

Java接口的基本概念详解相关推荐

  1. java 接口访问权限_详解Java之路(五) 访问权限控制

    在Java中,所有事物都具有某种形式的访问权限控制. 访问权限的控制等级从最大到最小依次为:public,protected,包访问权限(无关键词)和private. public,protected ...

  2. java接口的映射文件,详解mybatis通过mapper接口加载映射文件

    通过 mapper 接口加载映射文件,这对于后面 ssm三大框架 的整合是非常重要的.那么什么是通过 mapper 接口加载映射文件呢? 我们首先看以前的做法,在全局配置文件 mybatis-conf ...

  3. Java 性能调优 概念详解 小白教程

    对于很多研发人员来说,Java 性能调优都是很头疼的问题,为什么这么说?如今,一个简单的系统就囊括了应用程序.数据库.容器.操作系统.网络等技术,线上一旦出现性能问题,就可能要你协调多方面组件去进行优 ...

  4. 【案例学习】使用ThreadLocal计算Java接口执行时间(代码详解)

    [辰兮要努力]:hello你好我是辰兮,很高兴你能来阅读,昵称是希望自己能不断精进,向着优秀程序员前行! 博客来源于项目以及编程中遇到的问题总结,偶尔会有读书分享,我会陆续更新Java前端.后台.数据 ...

  5. java jvm sdk_JDK、SDK、JRE、JVM概念详解

    JDK.SDK.JRE.JVM概念的认识我们可以通过HelloWorld来理解这几个缩写词的具体含义: publicclassHelloWorld { publicstaticvoidmain(Str ...

  6. java none怎么用tomcat_在docker中部署tomcat并且部署java应用程序的步骤详解

    先给大家简单说下Docker的概念 Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化.容器是 ...

  7. 【Java SE】封装的详解

    篮球哥温馨提示:编程的同时不要忘记锻炼哦! 因为热爱,所以编程 目录 1.封装 1.1 什么是封装? 2.2 访问权限 2.3 private 简单使用 2.封装之包的概念 2.1 什么是包? 2.2 ...

  8. Java开发常见面试题详解(LockSupport,AQS,Spring循环依赖,Redis)_3

    Java开发常见面试题详解(LockSupport,AQS,Spring循环依赖,Redis)_3 总览 问题 详解 String.intern()的作用 link LeetCode的Two Sum题 ...

  9. java线程池ThreadPoolExecutor类详解

    线程池有哪些状态 1. RUNNING:  接收新的任务,且执行等待队列中的任务 Accept new tasks and process queued tasks  2. SHUTDOWN: 不接收 ...

最新文章

  1. 【VritualBox】虚拟机VirtualBox中ubuntu下加载USB设备报错:busy with a previous request.Plaease try again later
  2. JavaScript验证时间格式
  3. PRD文档范例,产品经理值得收藏的写作手册
  4. 9.7 top:实时显示系统中各个进程的资源占用状况
  5. 用.NET解索尼相机ARW格式照片
  6. 阿里巴巴对Java编程【控制语句】的规约
  7. 一文读懂区块链以及一个区块链的实现
  8. 笛卡尔函数_笛卡尔,伯克利和函数式React式编程
  9. 实现两数 交换的三种不同编程方法。
  10. Learn RxJava
  11. 安卓app可以用python写吗_安卓app可以用python写吗
  12. Wifidog 认证
  13. cad管线交叉怎么画_高效设计!多种方式进行管线连接、伸缩
  14. Material design - 色彩样式(一)
  15. 启蒙||那些人,那些剧||爱情+文学+英语
  16. 3种方法教你PS快速去掉水印
  17. 基于Acgis从全球.nc数据中提取中国地图并计算地区CO2值
  18. java网络编程案例9-1模拟微信聊天
  19. 对于交叉轴的一些解析和认识
  20. Vue Echarts风向折线图拐点生成

热门文章

  1. Fisher information(费雪信息)和费雪信息矩阵
  2. 《三体》里的超级计算机_我们今天能造出来吗?
  3. Android 事件分发机制分析及源码详解
  4. 第3课 把文件存入Git文档库
  5. MATLAB中同一路径下同文件的末尾继续写入数据
  6. 及时复盘的好处_复盘是什么意思,有什么意义
  7. 用ios企业证书发布ipa到服务器上扫码下载
  8. 钛媒体乌镇咖荟 | 数字化改变以流量为核心的平台生态,系统性思维的价值开始显现...
  9. webpack调用vue中报错, [WDS] Disconnected!解决方法
  10. 微信小程序 后台播放,多页面播放