java9对接口进行了改进,允许在接口中定义默认方法和类方法并且都支持方法的实现。同时添加了一种私有方法,私有方法也可提供方法实现。

注:下面语法只有在Java8以上的版本才允许在接口定义默认方法、类方法。

基本语法如下

[修饰符] interface 接口名 extends 父接口1,父接口2...
{
    零到多个常量定义...
    零到多个抽象方法定义...
    零到多个内部类、接口、枚举定义...
    零到多个私有方法、默认方法或类方法定义...
}

对上面语法的详细说明如下:

  • 修饰符可以使public或者省略,如果省略public访问控制符,则默认采用包权限访问控制符(default),即只有在相同包结构下才能访问该接口
  • 接口名应该与类名采用相同的命名规则,即如果仅从语法角度看,接口名只要是合法的标识符即可;如果要遵守Java的可读性规范,则接口名应由多个有意义的单词连缀而成[见名知意],每个单词首字母大写,单词和单词直接不需要任何的分隔符。接口名通常能够使用形容词。
  • 一个接口可以有多个父类,但是接口只能继承接口,不能继承类。

由于接口定义的是一种规范,因此接口里面不能包含构造器和初始化块的定义。

接口中可以包含成员变量(只能是静态常量)、方法(只能是抽象实例方法、类方法[静态方法]、默认方法[default修饰]、内部类[包括内部接口、枚举])定义。

接口的常量、方法、内部类和内部枚举都是public访问权限。定义接口成员可以省略!!!如果要手动指定也只能是public访问修饰符

JDK9中的 私有方法:其实私有方法的主要作用就是作为工具方法,为接口中的默认方法和静态方法[类方法]提供支持。私有方法可以拥有方法体,但私有方法不能使用default修饰。私有方法可以使用static修饰!!也就是说,私有方法可以是静态方法,可以是非静态的实例方法。

接口中的常量:系统会自动为这些成员变量增加static和final两个修饰符。也就是说,在接口中定义成员变量时,不管是否使用public static final修饰符,接口都是使用这三个修饰符来修饰。而且在接口里面没有构造器和初始块,所以接口定义的成员变量只能在定义时指定默认值(即初始化)。

  接口在定义成员变量采用如下两行代码的效果完全是一样的:

//若开发者不加 public static final 系统会自动加
int MAX_SIZE = 50;
public static final int MAX_SIZE = 50;

  上面说到接口里定义的方法只能是抽象方法、类方法、默认方法或私有方法,所以如果不是定义默认方法、类方法、私有方法,系统会自动为普通方法增加abstract修饰符;定义接口里面的普通方法时不管是否使用public abstract 修饰符,系统都会自动给加上。接口的普通方法不能有方法实现(方法体),因为是抽象的!!!;但是类方法、默认方法、私有方法又必须有方法实现(方法体)。

接口的继承:接口不同于类的继承,接口可以继承多个直接父接口。和类的继承相似的是,子接口扩展了某个父接口,将会获得父接口里定义的所有抽象方法、常量。继承多个直接父接口时,以逗号隔开 例如(interface 接口名 extends InterfaceA,InterfaceB)。

接口的主要用途:

  • 定义变量,也可以用于进行强制类型转换。
  • 调用接口中定义的常量
  • 被其他类实现

实现接口的类必须是public修饰,要符合重写的定义 “一大”

接口允许定义内部类,默认使用public static 修饰,也就是说接口内部类只是静态内部类

接口是位于继承树顶端的,多用于被其他类实现。由此引发面向接口编程。

该博文属于原创,若转发请配上原文地址https://www.cnblogs.com/shundong106/p/9905776.html

Java9 接口细谈的更多相关文章

  1. Java程序员从笨鸟到菜鸟之(五十一)细谈Hibernate(二)开发第一个hibernate基本详解

    在上篇博客中,我们介绍了<hibernate基本概念和体系结构>,也对hibernate框架有了一个初步的了解,本文我将向大家简单介绍Hibernate的核心API调用库,并讲解一下它的基 ...

  2. 细谈unity资源加载和卸载

    转载请标明出处:http://www.cnblogs.com/zblade/ 一.概要 在了解unity的资源管理方式之后,接下来细谈一下Unity的资源是如何从磁盘中加载到运行时的内存中,以及又是如 ...

  3. 【细谈Java并发】谈谈LinkedBlockingQueue(转)

    最近在看concurrent包的知识,看到LinkedBlockingQueue,发现一篇好文推荐给大家.原文地址:[细谈Java并发]谈谈LinkedBlockingQueue 1.简介 上篇我们介 ...

  4. Spark RDD概念学习系列之细谈RDD的弹性(十六)

    细谈RDD的弹性  所谓,弹性,是指在内存不够时可以与磁盘进行交换. 弹性之一:自动的进行内存和磁盘数据存储的切换   弹性之二:基于Lineage(血缘)的高效容错   弹性之三:Task如果失败会 ...

  5. 细谈getRequestDispatcher()与sendRedirect()的区别

    问题?细谈getRequestDispatcher()与sendRedirect()的区别 首先我们要知道: (1)request.getRequestDispatcher()是请求转发,前后页面共享 ...

  6. JAVA基础细谈

    JAVA基础细谈 一. 源文件和编译后的类文件     源文件的本质就是程序文件,是程序员编写,是人看的.而编译后的类文件是给电脑看的文件.一个类就是一个文件,无论这个类写在哪里,编译以后都是一个文件 ...

  7. Css的使用细谈

    Css的使用细谈 Css可以通过简单的更改CSS文件,改变网页的整体表现形式,可以减少我们的工作量,所以她是每一个网页设计人员的必修课. Css简介              (1) CSS是用于布局 ...

  8. 细谈HTML解析模块

     细谈HTML解析模块 Html在网页中所占的位置,用一个简单直观的图给展示一下:    

  9. 细谈unity资源管理的设计

    一.概要 本文主要说说Unity是如何管理的,基于何种方式,基于这种管理方式,又该如何规划资源管理,以及构建bundle,是后面需要详细讨论的. 二.Unity的资源管理方式 2.1 资源分类 uni ...

随机推荐

  1. SQLServer之函数简介

    用户定义函数定义 与编程语言中的函数类似,SQL Server 用户定义函数是接受参数.执行操作(例如复杂计算)并将操作结果以值的形式返回的例程. 返回值可以是单个标量值或结果集. 用户定义函数准则 ...

  2. Cs231n课堂内容记录-Lecture 7 神经网络训练2

    Lecture 7  Training Neural Networks 2 课堂笔记参见:https://zhuanlan.zhihu.com/p/21560667?refer=intelligent ...

  3. 在Windows 10中截取截图的6种方式 简介

    在Windows 10中截取截图的6种方式 简介 截图对于不同的目的很重要.它可以用于捕获笔记本电脑上的任何内容的截图.所以,如果你使用Windows 10,你可能不知道如何截图,因为它是比较新的.因 ...

  4. JavaScript作用域链的理解

    前言 作用域是JavaScript一个很重要的概念,想要学好JavaScript就需要理解javascript作用域和作用域链的工作原理.这篇文章对JavaScript作用域链和作用域链做一个简单的介 ...

  5. luogu P4842 城市旅行

    嘟嘟嘟 好题,好题 刚开始突发奇想写了一个\(O(n ^ 2)\)暴力,结果竟然过了?!后来才知道是上传题的人把单个数据点开成了10s-- 不过不得不说我这暴力写的挺好看的.删边模仿链表删边,加边的时 ...

  6. 苹果手机连接Wifi认证机制

    Wifi状态保持方法和nas设备 https://patents.google.com/patent/CN106793171A/zh 基于ios终端的离线wifi热点认证方法和认证系统 https:/ ...

  7. Jenkins + Ansible + Gitlab之ansible篇

    Ansible介绍 什么是Ansible? Ansible是一个开源部署工具 开发语言:Python 特点:SSH协议通信,全平台,无需要编译,模块化部署管理 作用:推送Playbook进行远程节点快 ...

  8. Codeforces Round #546 (Div. 2)-D - Nastya Is Buying Lunch

    这道题,神仙贪心题... 题意就是我给出数的顺序,并给出多个交换,每个只能用于相邻交换,问最后一个元素,最多能往前交换多少步. 我们考虑这样一个问题,如果一个这数和a[n]发生交换,那么这个数作为后面 ...

  9. python获取list列表随机数据

    第一种方法(推荐)适用于随机取一个值, 返回一个值import randomlist1 = ['佛山', '南宁', '北海', '杭州', '南昌', '厦门', '温州']a = random.c ...

  10. Shell命令-文件及目录操作之file、md5sum

    文件及目录操作 - file.md5sum 1. file:显示文件的类型 file命令的功能说明 用于辨识文件类型.通过 file 指令,我们得以辨识该文件的类型. file命令的语法格式 file ...