第六章 接口,lamda表达式与内部类
接口
- 接口可以包含常量, 且不需要publish static final修饰, 接口的域会自动添加该修饰符. Java建议不要写多余的代码,因此省略修饰符更简洁.
- 全部都是常量的接口背离了接口的初衷,不建议使用
- Java SE8 中, 允许接口增加静态方法,但这也有悖接口的初衷
- 接口的默认方法实现用 defalut 修饰, 适用于子类只需要实现其中几个方法的情况, 而其他方法以默认方法形势存在, 子类没必要实现他们.
- 接口方法命名的二义性需要子类中解决,可以使用InterfaceName.super.Method()解决
- 接口和类方法的二义性以类的方法优先, 这样可以保证与之前版本的兼容性
- 不要让一个接口默认方法重新定义Object中的方法, 原因即上一点提到的, 类的方法优先导致默认方法失效.
lamda表达式
- 对于只有一个抽象方法的接口(没有default修饰)),需要这种接口的对象时,就可以提供一个 lambda 表达式。这种接口称为函数式接口(functional interface)。
- @FunctionalInterface 注解表明接口是一个函数式接口,这个注解并非必须, java提倡使用, 这样可以避免对接口新增声明导致编译错误,另外也可以生成文档.
- lamda表达式会转化为函数式接口, java的设计者没有为语言增加函数类型.
- 方法引用,示例:Timer t = new Timer(1000 , event-> System.out.println(event)); 可以使用现有的方法,写成Timer t = new Timer(1000 , Systei.out::println)
- java有个限制, 无法构造泛型类型的数组,可以使用数组的构造器引用克服这个限制,如Person 口 people = stream.toArray(Person[] :: new)
- lamda表达式中只能引用值不变的外部变量,原因是并发执行时改变变量不安全
内部类
- 使用内部类的原因:(1)可以访问所在作用域的数据,包括私有数据;(2)对包内其他类隐藏;(3)匿名类比较便捷
- 内部类中的static域必须时final的, 因为内部类可能有不同的实例, 如果不是final的就可能有多个不同的值;
- 局部内部类是定义在方法中的内部类, 不能用public或private修饰符声明,他的作用域限制在它所在的块中
- 静态方法无法使用getClass()因为没有this引用, new Object(){}.getClass().getEnclosingClass() 可以获取到外围类
代理
- 代理是在程序运行过程中动态生成一个新类
- 代理模式可以参考我之前专题的文章设计模式三: 代理模式(Proxy) -- JDK的实现方式
- 代理类一定是public final的
第六章 接口,lamda表达式与内部类的更多相关文章
- [core java学习笔记][第六章接口与内部类]
接口域内部类 接口 描述类具有什么功能,不给出具体实现. 内部类 用于设计协作关系的类集合 代理 实现任意接口的对象. 6.1 接口 接口声明 public interface Comparable ...
- JavaSE学习总结(六)——接口、抽象类、内部类
一.不需要实例化的原因 看一个示例: package com.zhangguo.chapter5.s1; /**动物园*/ public class Zoo { public static void ...
- Java核心技术卷一基础知识-第6章-接口与内部类-读书笔记
第6章 接口与内部类 本章内容: * 接口 * 对象克隆 * 接口与回调 * 内部类 * 代理 接口技术主要用来描述类具有什么功能,而并不给出每个功能的具体实现.一个类可以实现(implement)一 ...
- “全栈2019”Java第六十六章:抽象类与接口详细对比
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...
- jdk8系列一、jdk8 Lamda表达式语法、接口的默认方法和静态方法、supplier用法
一.简介 毫无疑问,Java 8是Java自Java 5(发布于2004年)之后的最重要的版本.这个版本包含语言.编译器.库.工具和JVM等方面的十多个新特性. 在本文中我们将学习这些新特性,并用实际 ...
- “全栈2019”Java第一百零六章:匿名内部类与抽象类接口注意事项
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...
- “全栈2019”Java第九十六章:抽象局部内部类详解
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...
- “全栈2019”Java第八十九章:接口中能定义内部类吗?
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...
- 29 匿名内部类、函数型接口、lamda表达式的引入
匿名内部类 参考:https://www.runoob.com/w3cnote/java-inner-class-intro.html 进入后搜索匿名内部类. 函数型接口 函数式接口(Function ...
随机推荐
- 手把手教你实现Android RecyclerView上拉加载功能
摘要 一直在用到RecyclerView时都会微微一颤,因为一直都没去了解怎么实现上拉加载,受够了每次去Github找开源引入,因为感觉就为了一个上拉加载功能而去引入一大堆你不知道有多少BUG的代码, ...
- kubernete 本地持久化存储 kube-controller-manager的日志输出 + pvc pv 概念 -- storageclass 概念
1.mysql持久化存储 [root@pserver78 0415villa]# cat latestmysql.yaml |grep -v '^#' apiVersion: v1 kind: Ser ...
- Linux内存管理 (25)内存sysfs节点解读
1. General 1.1 /proc/meminfo /proc/meminfo是了解Linux系统内存使用状况主要接口,也是free等命令的数据来源. 下面是cat /proc/meminfo的 ...
- UML 教程
UML 教程 关键词:部署图, 组件图, 包图, 类图, 复合结构图, 对象图, 活动图, 状态机图, 用例图, 通信图, 交互概述图, 时序图, 时间图 简介 部署图 组件图 包图 类图 复合结构图 ...
- iOS开发基础-九宫格坐标(3)之Xib
延续iOS开发基础-九宫格坐标(2)的内容,对其进行部分修改. 本部分采用 Xib 文件来创建用于显示图片的 UIView 对象. 一.简单介绍 Xib 和 storyboard 的比较: 1) X ...
- 轻松测试 logstash 的配置文件
配置文件本身非常脆弱!所以修改配置文件自然会引入部署失败的风险.如果能够对配置文件进行自动化测试将会极大的降低这种风险.本文将介绍一个可以自动化测试 logstash 配置文件的工具,让大家可以像写单 ...
- java 实现递归实现tree
package app.util; import java.util.ArrayList; import java.util.List; import com.alibaba.fastjson.JSO ...
- Laravel 框架结构 以及目录文件解读(学习笔记)
composer下载Laravel 5.4(由于PHP版本仅7.0,故未下载5.6) composer create-project laravel/laravel your-project-name ...
- Tensorflow--矩阵切片与连接
博客转载自:https://blog.csdn.net/davincil/article/details/77893185 函数原型:slice(input_, begin, size, name=N ...
- Asp.Net core 视图组件ViewComponent
视图组件 ViewComponent 最近用了一下视图组件,还挺方便的,如果遇到公共的部分,可以抽出来,写成视图组件,方便调用 先上图看一下效果:比如首页的4个画红框的地方是4个模块,有些地方可能要重 ...