Java8-default / defender关键字

今天研究Java8源码的时候发现了一个神奇的关键字,default,我一直以为default只是在switch里面起作用,其余的就没什么了。然而,知道我看到它作为方法限定符之后我的三观刷新了。。。居然还可以作为权限访问符!

写了几个例子研究一下:

源码1:

public interface DefaultAPI {

public void add(int a, int b);

default void minus(int a, int b) {

System.out.println("a-b="+(a-b));

}

}

public interface DefaultAPI2 {

default void minus(int a, int b) {

System.out.println(a+"-"+b+"="+(a-b));

}

public void add(int a, int b);

}

从源码可以看出,两个接口的方法都相同,只是打印的有点区别。那么这会有什么影响呢?

子类继承这两个接口的时候,需要重写这个方法,而这两个方法已经被实现啦!没错,interface接口中可以写具体实现方法啦!

这个作用是为了lambda表达式与之前的jdk接口紧密联系起来,向下兼容,更方便开发者利用计算机的资源。

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-08-28 00:27:22

Java8-default / defender关键字的相关文章

Java8 default关键字

在看Java8 Function接口的时候看到一个东西:接口里面使用default关键字具体实现了方法. 其他具体的参考:https://blog.csdn.net/qq_35835624/article/details/80196932 原文地址:https://www.cnblogs.com/LinsenLi/p/11615416.html

Java8 default方法

为什么需要引入default方法 在Java7以前interface只能声明方法,而不能实现方法. 在Java8中这一情况有所改变,接口中引入了default方法和static方法,interface中声明的方法默认为 public abstract 修饰,default方法 就相当于只有public 修饰,并且可以有具体的实现,一样可以覆盖(参见下面的例子):static方法在interface里和在其他地方是一样的,类名.方法名调用即可. 引入default主要目的是为了实现接口的升级.因为

c#中的关键字

c#中的关键字 关键字是对编译器具有特殊意义的预定义保留标识符.它们不能在程序中用作标识符,除非它们有一个 @ 前缀.例如,@if 是有效的标识符,但 if 不是,因为 if 是关键字. 下面是列出的所有的关键字在 C# 程序的任何部分都是保留标识符: abstract as base bool break byte case catch char checked class const continue decimal default delegate do double else enum

Java开发技术栈:Java基础语法(一)标识符与关键字

Java标识符 定义 给包,类,方法,变量起名字的符号. 组成规则 标识符由字母.数字.下划线.美元符号组成. 命名原则:见名知意 包名:全部小写,多级包用.隔开. 举例:com.jourwon 类.接口:一个单词首字母大写,多个单词每个单词的首字母大写. 举例:Student,Car,HelloWorld 方法和变量:一个单词首字母小写,多个单词从第二个单词开始每个单词的首字母大写. 举例:age,maxAge,show(),getAge() 常量:如果是一个单词,所有字母大写,如果是多个单词

JDK 5~8的特性对比

原文请参考:https://bbs.csdn.net/topics/392062347 jdk5新特性 1.自动装箱和拆箱2.枚举3.静态导入4.可变参数5.內省   是Java语言对Bean类属性.事件的一种缺省处理方法.例如类A中有属性那么,那我们可以通过getName,setName来得到其值或者设置新的值.通过getName/setName来访问name属性,这就是默认的规则.Java中提供了一套API用来访问某个属性的getter,setter方法,通过这些API可以使你不需要了解这个

jdk1.5-1.10新特性

从网上搜集摘录的jdk特性,在这里记录下来以便自我学习. jdk5新特性    1.自动装箱和拆箱    2.枚举    3.静态导入    4.可变参数    5.內省       是Java语言对Bean类属性.事件的一种缺省处理方法.例如类A中有属性那么,那我们可以通过getName,setName来得到其值或者设置新的值.通过getName/setName来访问name属性,这就是默认的规则.Java中提供了一套API用来访问某个属性的getter,setter方法,通过这些API可以使

前端到后台ThinkPHP开发整站(1)

1.前言: 我个人从来没有写过博客文章,作为一个程序员没有自己的博客算是一个合格的程序员,所以我地想想也要经营起一个的博客,做一个小项目,写这博客算就做这个项目的一个项目笔记吧!现在自学着ThinkPHP,就借此框架做一个CMS系统.废话不多说了,赶紧进入学习了. 2.需求分析: 功能分析:  一.登录退出功能.  二.菜单功能:涉及前端菜单导航设置.  三.文章管理:文章编写,编辑插件掌握,异步图片上传.  四.推荐位管理:让用户自行设定首页推荐文章显示的设定.  五.用户管理:管理后台登录的

PostgreSQL介绍以及如何开发框架中使用PostgreSQL数据库

最近准备下PostgreSQL数据库开发的相关知识,本文把总结的PPT内容通过博客记录分享,本随笔的主要内容是介绍PostgreSQL数据库的基础信息,以及如何在我们的开发框架中使用PostgreSQL数据库,希望大家多多提意见. 1.PostgreSQL数据库介绍 PostgreSQL是以加州大学伯克利分校计算机系开发的 POSTGRES,现在已经更名为PostgreSQL.它具有很多不错的特点: 开源:PostgreSQL 是一个自由的对象-关系数据库服务器(数据库管理系统),它在灵活的 B

ABAP OO 开发语法整理

[转自 http://blog.csdn.net/saphome/article/details/6956933] 在类中,只能用TYPE 附加关键字指定数据类型. •TYPES: 一般的类型定义方法 •CONSTANTS: 一般的常数定义方法 只能用LIKE 引用本地数据对象. •DATA: var1 TYPE <TYPES 定义的类型或字典类型>. •DATA: var2 LIKE var1 <不能使用字典对象>. 用DATA 声明的公共属性如果加了READ-ONLY 附加 关