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

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

类:属性、构造方法、行为、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表达式里只是一个调用

posted @   青核桃啊  阅读(16)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
点击右上角即可分享
微信分享提示