Java核心技术卷1学习笔记6

Java核心技术卷1学习笔记6

接口、lambda表达式与内部类

1、接口

1.1、接口概念

接口不是类,而是对类的一组需求描述,这些类要遵从接口描述的统一格式进行定义。接口中的所有方法默认属于public,因此,在接口 声明方法中,不必提供关键字public。
实现一个接口:
(1)将类声明为实现给定的接口
(2)对接口中的所有方法进行定义
关键字:implements

1.2、接口的特性

接口不是类,不能使用new运算符实例化一个接口;不能构造接口的对象,但可以声明接口的变量。接口中的域将被自动设为public static final。

1.3、接口与抽象类

使用抽象类表示通用属性:每个类只能扩展于一个类。
Java不支持多继承。

1.4、静态方法
1.5、默认方法

可为接口方法提供一个默认实现。必须用default修饰符标记这个方法。
默认方法一个重要用法是“接口演化”。

1.6、解决默认方法冲突

(1)超类优先。
(2)接口冲突。

2、接口示例

2.1、接口与回调

回调(callback)是一种常见的程序设计模式,可以指出某个特定事件发生时应该采取的动作。

2.2、Comparator接口
2.3、对象克隆

Cloneable接口:该接口指示一个类提供了一个安全的clone方法。

3、lambda表达式

lambda表达式是一个传递的代码块,可以在以后执行一次或多次。

3.1、lambda表达式语法

参数,箭头以及一个表达式。如果代码要完成的计算无法放在一个表达式,就可以像写方法一样,把这些代码放在{}中,并包含显示的return语句。

3.2、函数式接口

对于只有一个抽象方法的接口,需要这种接口的对象时,就可以提供一个lambda表达式。这种接口称为函数式接口(functional interface)。

3.3、方法引用

例:表达式System.out::println是一个方法引用,它等价于lambda表达式:
x->System.out.println(x)。
用::操作符隔开方法名与对象名或类名。

3.4、构造器引用

与方法引用类似,只不过方法名为new。
例:Person::new是Person构造器的一个引用。
可以用数组类型建立一个构造器引用。

3.5、变量作用域

lambda表达式中捕获的变量必须实际上是最终变量。实际上的最终变量指:这个变量初始化之后就不会再为它赋新值。
在一个lambda表达式中使用this关键字时,是指创建这个lambda表达式的方法的this参数。

3.6、处理lambda表达式

4、内部类

内部类是定义在另一个类中的类。

4.1、使用内部类访问对象状态

内部类既可以访问自身的数据域,也可以访问创建它的外围类对象的数据域。
只有内部类可以是私有的,而常规类只可以具有包可见性,或公有可见性。

4.2、内部类的特殊语法规则

内部类中声明的所有静态域都必须是final。

4.3、局部内部类

局部类不能用public或private访问说明符进行声明。它的作用域被限定在声明这个局部类的块中。优势:对外部世界可以完全的隐藏起来。

4.4、由外部方法访问变量
4.5、匿名内部类

假如只需要创建这个类的一个对象,就不必命名了。
由于构造器名字必须与类名相同,所以匿名类不能有构造器,可以将构造器参数传递给超类构造器。尤其是在内部类实现接口的时候,不能有任何构造参数。

4.6、静态内部类

可将内部类声明为static,以便取消产生的引用。

发布了21 篇原创文章 · 获赞 19 · 访问量 598

猜你喜欢

转载自blog.csdn.net/weixin_44458246/article/details/104183620