Java9 接口细谈
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 接口细谈的更多相关文章
- Java程序员从笨鸟到菜鸟之(五十一)细谈Hibernate(二)开发第一个hibernate基本详解
在上篇博客中,我们介绍了<hibernate基本概念和体系结构>,也对hibernate框架有了一个初步的了解,本文我将向大家简单介绍Hibernate的核心API调用库,并讲解一下它的基 ...
- 细谈unity资源加载和卸载
转载请标明出处:http://www.cnblogs.com/zblade/ 一.概要 在了解unity的资源管理方式之后,接下来细谈一下Unity的资源是如何从磁盘中加载到运行时的内存中,以及又是如 ...
- 【细谈Java并发】谈谈LinkedBlockingQueue(转)
最近在看concurrent包的知识,看到LinkedBlockingQueue,发现一篇好文推荐给大家.原文地址:[细谈Java并发]谈谈LinkedBlockingQueue 1.简介 上篇我们介 ...
- Spark RDD概念学习系列之细谈RDD的弹性(十六)
细谈RDD的弹性 所谓,弹性,是指在内存不够时可以与磁盘进行交换. 弹性之一:自动的进行内存和磁盘数据存储的切换 弹性之二:基于Lineage(血缘)的高效容错 弹性之三:Task如果失败会 ...
- 细谈getRequestDispatcher()与sendRedirect()的区别
问题?细谈getRequestDispatcher()与sendRedirect()的区别 首先我们要知道: (1)request.getRequestDispatcher()是请求转发,前后页面共享 ...
- JAVA基础细谈
JAVA基础细谈 一. 源文件和编译后的类文件 源文件的本质就是程序文件,是程序员编写,是人看的.而编译后的类文件是给电脑看的文件.一个类就是一个文件,无论这个类写在哪里,编译以后都是一个文件 ...
- Css的使用细谈
Css的使用细谈 Css可以通过简单的更改CSS文件,改变网页的整体表现形式,可以减少我们的工作量,所以她是每一个网页设计人员的必修课. Css简介 (1) CSS是用于布局 ...
- 细谈HTML解析模块
细谈HTML解析模块 Html在网页中所占的位置,用一个简单直观的图给展示一下:
- 细谈unity资源管理的设计
一.概要 本文主要说说Unity是如何管理的,基于何种方式,基于这种管理方式,又该如何规划资源管理,以及构建bundle,是后面需要详细讨论的. 二.Unity的资源管理方式 2.1 资源分类 uni ...
随机推荐
- 【转载】FPGA 中的latch 锁存器
以下这篇文章讲述了锁存器的一些概念和注意事项.原文标题及链接: FPGA 中的latch 锁存器 - 快乐至永远上的博客 - 与非博客 - 与网 http://www.eefocus.com/liuy ...
- 小小白搭建nextcloud云盘
我是一名linux的小小白,今天就利用自己的所学搭建属于自己的云盘——nextcloud. 本人学生狗,普通的云盘也要几十块钱,既然我们只是拿来搭建巩固自己知识并不做为生产力,我们就用VMware W ...
- LeetCode算法题-Range Addition II(Java实现)
这是悦乐书的第271次更新,第285篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第138题(顺位题号是598).给定一个m行n列的新二维数组M,其初始值为0.提供一个二 ...
- 算法"新"名词
这个“新”是对于自己而言. 最近几天接触到很多新的名词,如: 回溯法(backtracking):以前知道,但很少用 动态规划(dynamic programming):序列型.矩阵型.区间型.背包等 ...
- DB2增删改不记录日志
第一步:关闭事务自动提交 C:\DB2>db2set DB2OPTIONS=+c +c永久关闭自动提交,-c永久开启自动提交 第二步:表修改为不记录日志 db2 alter table T1 a ...
- 大数据处理框架之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 ...
- [LeetCode] 6. Z 字形变换
题目链接:(https://leetcode-cn.com/problems/zigzag-conversion/) 题目描述: 将一个给定字符串根据给定的行数,以从上往下.从左到右进行 Z 字形排列 ...
- ubuntu 16.04 LTS - 谷歌拼音输入法
https://blog.csdn.net/chengyq116/article/details/78638249 1. installation1.1 汉语语言包 sudo apt-get inst ...
- P1546 最短网络 Agri-Net题解(克鲁斯卡尔)
P1546 最短网络 Agri-Net 那么这个题是一道最小生成树的板子题 在此讲解kruskal克鲁斯卡尔方法: 原理: 并查集在这里被用到: 众所周知:树满足这样一个定理:如果 图 中有n个节点并 ...
- 使用github 的相关博客
基于hexo+github搭建一个独立博客 如何用Github的gh-pages分支展示自己的项目 使用git clone error: RPC failed Git的使用-- ...