内部类、匿名内部类、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表达式里只是一个调用
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通