内部类、匿名内部类、Lambda、方法引用

发布时间 2023-08-08 00:55:17作者: Rover20230226

继承中,子类重写父类的方法,其权限不能小于父类方法的权限。

类:属性、构造方法、行为、get set方法、toString方法

内部类:

​ 语法:

​ 外部类名.内部类名 对象名 = new 外部对象().new 内部对象();

​ 作用域:

​ 内部可以访问外部,外部不能访问内部

# 规范
	1.语法
	2.概念
	3.实例

匿名内部类

有类才会有对象

二合一{
定义一个类
创建对象
}
	匿名内部类(匿名:匿的是类名)
1. 语法(类名不重要,类体才重要:方法重写)
	父类类型/父接口类型 变量 = new 父类类型/父接口类型(){ // 方法重写};

	Animal a = new Animal() {
    	// 方法重写
	};
2. 作用:简化语法,它是定义类 + 创建对象的二合一

3. 弊端:因为没有类名,只能一次性使用

语法简洁的代价是牺牲阅读性

0. 小技巧:反向定义
	1). 正常流程:先定义,后调用
	2). 现在:先调用,后定义(利用编程工具的提示创建,提高代码编写效率)

# Lambda表达式(重点:方法,实现过程)
0. 使用前提:
	有一个接口,接口中有且仅有一个抽象方法
	
1. 组成Lambda表达式的三要素:
	形式参数,箭头,代码块

2. 关注方法就是所谓的面向函数式编程
	函数式编程:关注方法
	1). 入参: 形参
	2). 逻辑: 方法体
	3). 出参: 返回值
3. 标准写法
		(形式参数) -> {方法体}
	
4. 函数式接口注解
	@FunctionalInterface
	作用:检查当前接口是否是函数式接口,如果不是,编译报错
	
5. Lambda的省略写法
	1). 参数类型可以省略。但是有多个参数的情况下,不能只省略一个
	2). 如果参数有且仅有一个,那么小括号可以省略
	3). 如果代码块的语句只有一条,可以省略大括号和分号,和return关键字
	
6. 匿名内部类和Lambda表达式区别
	1. 使用场景
		1). Lambda表达式只能用于函数式接口场景
		2). 匿名内部类不仅可用于类,也可以用于接口(多用于抽象类和接口)
		Lambda表达式确实更简洁,不能完全替代
    2. 本质区别
    	1). 匿名内部类还是类
    	2). Lambda表达式不是类
    	运行效率: Lambda表达式 > 匿名内部类
    	
    3. 语法注意点
    	匿名内部类可以独立存在
    	Lambda不可以,必须依赖上下文

Arrays.sort(array)
1. 会对array中的元素进行排序,仅限于基本类型
2. 如果是引用类型,要做以下两件事之一:
	1). Arrays.sort(array, Comparator 比较器接口的实现类)
	2). 要么此引用类型实现 Comparable接口
		注:
		o1 - o2 升序
		02 - o1 降序
# 方法引用(重点:是引用谁的什么方法)
1. 引用已有方法替代当前表达
2. 语法
		方法的归属方 :: 方法名
System:类
out:属性
println:方法

理解方法:System.out对象的println方法就是: 有个参数,直接打印
    
method(System.out::println);

​ 静态方法 直接引用

​ 非静态方法 new

# 特定类型的方法引用(了解)
Java约定:
	如果某个Lambda表达式里只是一个调用