I 内部类
一、内部类概述
1、定义:在一个类中定义一个类
2、分类:成员内部类、局部内部类、匿名内部类
3、内部类访问特点:(1)内部类可以直接访问外部类的成员,包括私有成员(2)外部类要通过创建对象访问内部类成员
二、内部类特点及使用
1、成员内部类:在类的成员位置
(i)属于类中的成员,可由修饰符修饰
(ii)private修饰:私有成员内部类访问需要在其所在外部类中创建对象使用
(iii)static修饰:(1)静态成员内部类访问格式:外部类名.内部类名.对象=new 外部类名.内部类名()(2)静态成员内部类方法访问:外部类名.内部类名.方法名()
2、局部内部类:在类的局部位置
(i)定义于方法内部,外界无法使用,需要在方法内部创建对象使用
(Ii)局部内部类可以访问外部类成员,也可以访问方法内的局部变量
3、匿名内部类:本质上是特殊的局部内部类(定义在方法内部)
(i)使用前提是:有一个接口或类
(ii)格式:new 接口名|类名(){重写方法}
(iii)匿名内部类提供了实现接口的简便方法,将(继承|实现)、方法重写、创建对象合并为一步完成
三、内部类代码练习
€1 普通成员内部类访问使用练习
€2 私有成员内部类访问练习
€3 静态成员内部类访问练习
€4 局部内部类访问练习
€5 实现接口两种方法对比(匿名内部类使用练习)
€6 匿名内部类调用接口中多个方法练习
€7 匿名内部类应用场景练习
note:当方法的形式参数是接口或者抽象类时,可以将匿名内部类作为实际参数进行传递
II Lambda
一、编程思想概述
1、面向对象编程思想:通过对象的形式完成某个事
2、函数式编程思想:忽略面向对象的复杂语法,强调做什么,而不是做的形式
3、匿名内部类与Lambda表达式对比体验
二、Lambda表达式标准格式
1、格式:(形式参数)—>{代码块(重写方法)};
2、形式参数:多个参数之间用,隔开,无参数保留空白括号
3、—>:代表指向动作
4、代码块:方法体内容
5、使用前提:(1)有一个接口(2)接口中有且仅有一个抽象方法
三、Lambda表达式使用练习
€1 Lambda表达式优化匿名内部类
€2 接口作为方法形式参数时,匿名内部类和Lambda表达式实现接口(接口方法无返回、无传参)
€2 匿名内部类和Lambda表达式实现接口(接口方法无返回、有传参)
€3 匿名内部类和Lambda表达式实现接口(接口方法有返回、无传参)
€4 匿名内部类和Lambda表达式实现接口(接口方法有返回、有传参)
四、Lambda表达式省略模式
省略规则:
(1)参数类型可以省略;多个参数时,每个参数的参数类型都要省略
(2)如参数有且仅有一个,()可以省略
(3)代码块只有一条语句时,{}和;可以省略,甚至return也可省略
(4)无参数时,保留()
€5 Lambda表达式省略模式代码练习
五、Lambda表达式和匿名内部类的区别
1、所需类型不同
(1)匿名内部类:接口、抽象类、具体类
(2)Lambda表达式:接口
2、使用限制不同
(1)匿名内部类:接口中抽象方法不限制个数
(2)Lambda表达式:接口中有且仅有一个抽象方法
3、实现原理不同
(1)匿名内部类:编译后,产生单独的.class子节码文件
(2)Lambda表达式:编译后,不产生单独的.class子节码文件。对应的子节码文件在运行的时候动态产生