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 ...
随机推荐
- SQLServer之函数简介
用户定义函数定义 与编程语言中的函数类似,SQL Server 用户定义函数是接受参数.执行操作(例如复杂计算)并将操作结果以值的形式返回的例程. 返回值可以是单个标量值或结果集. 用户定义函数准则 ...
- Cs231n课堂内容记录-Lecture 7 神经网络训练2
Lecture 7 Training Neural Networks 2 课堂笔记参见:https://zhuanlan.zhihu.com/p/21560667?refer=intelligent ...
- 在Windows 10中截取截图的6种方式 简介
在Windows 10中截取截图的6种方式 简介 截图对于不同的目的很重要.它可以用于捕获笔记本电脑上的任何内容的截图.所以,如果你使用Windows 10,你可能不知道如何截图,因为它是比较新的.因 ...
- JavaScript作用域链的理解
前言 作用域是JavaScript一个很重要的概念,想要学好JavaScript就需要理解javascript作用域和作用域链的工作原理.这篇文章对JavaScript作用域链和作用域链做一个简单的介 ...
- luogu P4842 城市旅行
嘟嘟嘟 好题,好题 刚开始突发奇想写了一个\(O(n ^ 2)\)暴力,结果竟然过了?!后来才知道是上传题的人把单个数据点开成了10s-- 不过不得不说我这暴力写的挺好看的.删边模仿链表删边,加边的时 ...
- 苹果手机连接Wifi认证机制
Wifi状态保持方法和nas设备 https://patents.google.com/patent/CN106793171A/zh 基于ios终端的离线wifi热点认证方法和认证系统 https:/ ...
- Jenkins + Ansible + Gitlab之ansible篇
Ansible介绍 什么是Ansible? Ansible是一个开源部署工具 开发语言:Python 特点:SSH协议通信,全平台,无需要编译,模块化部署管理 作用:推送Playbook进行远程节点快 ...
- Codeforces Round #546 (Div. 2)-D - Nastya Is Buying Lunch
这道题,神仙贪心题... 题意就是我给出数的顺序,并给出多个交换,每个只能用于相邻交换,问最后一个元素,最多能往前交换多少步. 我们考虑这样一个问题,如果一个这数和a[n]发生交换,那么这个数作为后面 ...
- python获取list列表随机数据
第一种方法(推荐)适用于随机取一个值, 返回一个值import randomlist1 = ['佛山', '南宁', '北海', '杭州', '南昌', '厦门', '温州']a = random.c ...
- Shell命令-文件及目录操作之file、md5sum
文件及目录操作 - file.md5sum 1. file:显示文件的类型 file命令的功能说明 用于辨识文件类型.通过 file 指令,我们得以辨识该文件的类型. file命令的语法格式 file ...