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. 【转载】FPGA 中的latch 锁存器

    以下这篇文章讲述了锁存器的一些概念和注意事项.原文标题及链接: FPGA 中的latch 锁存器 - 快乐至永远上的博客 - 与非博客 - 与网 http://www.eefocus.com/liuy ...

  2. 小小白搭建nextcloud云盘

    我是一名linux的小小白,今天就利用自己的所学搭建属于自己的云盘——nextcloud. 本人学生狗,普通的云盘也要几十块钱,既然我们只是拿来搭建巩固自己知识并不做为生产力,我们就用VMware W ...

  3. LeetCode算法题-Range Addition II(Java实现)

    这是悦乐书的第271次更新,第285篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第138题(顺位题号是598).给定一个m行n列的新二维数组M,其初始值为0.提供一个二 ...

  4. 算法"新"名词

    这个“新”是对于自己而言. 最近几天接触到很多新的名词,如: 回溯法(backtracking):以前知道,但很少用 动态规划(dynamic programming):序列型.矩阵型.区间型.背包等 ...

  5. DB2增删改不记录日志

    第一步:关闭事务自动提交 C:\DB2>db2set DB2OPTIONS=+c +c永久关闭自动提交,-c永久开启自动提交 第二步:表修改为不记录日志 db2 alter table T1 a ...

  6. 大数据处理框架之Strom:Flume+Kafka+Storm整合

    环境 虚拟机:VMware 10 Linux版本:CentOS-6.5-x86_64 客户端:Xshell4 FTP:Xftp4 jdk1.8 storm-0.9 apache-flume-1.6.0 ...

  7. [LeetCode] 6. Z 字形变换

    题目链接:(https://leetcode-cn.com/problems/zigzag-conversion/) 题目描述: 将一个给定字符串根据给定的行数,以从上往下.从左到右进行 Z 字形排列 ...

  8. ubuntu 16.04 LTS - 谷歌拼音输入法

    https://blog.csdn.net/chengyq116/article/details/78638249 1. installation1.1 汉语语言包 sudo apt-get inst ...

  9. P1546 最短网络 Agri-Net题解(克鲁斯卡尔)

    P1546 最短网络 Agri-Net 那么这个题是一道最小生成树的板子题 在此讲解kruskal克鲁斯卡尔方法: 原理: 并查集在这里被用到: 众所周知:树满足这样一个定理:如果 图 中有n个节点并 ...

  10. 使用github 的相关博客

    基于hexo+github搭建一个独立博客     如何用Github的gh-pages分支展示自己的项目     使用git clone error: RPC failed     Git的使用-- ...