JAVA复习(八)内部类_链式调用_lambda
需求:需要一个方法,方法返回的是一个接口的实现类的对象;
使用匿名内部类就可以直接return;
简化,直接方法都不要;
在main 方法中
-----------------------------------------------------------------------------
链式调用
---------------------------------------------------------------------------------
内部类(非静态)
---
总结:外围类先加载再加载内部类
#(所以内部类可以访问外围类的成员;外围类要范围内部类就需要先生成对象)
#内部类访问外部类,自己用this,外围用类.this.;
(内部类访问外围类对象)外围类类名.this.属性;指明是外围类的属性
(二)静态成员方法访问内部类;
(因为此时还没有外围类的对象),要先创建当前类的对象再生成内部类的对象;
外部类创建内部类对象
-------------------------------------------------------------------------------------
------------------------------------------------------------------------------------
静态内部类和外围的静态成员没有明确关系
静态内部内就是一个普通类,放进了一个类里;好处是不受双方权限限制;外部类访问的时候依然要先看外围类;
不要括号;
main触发了Demo内加载;(就算触发了构造器也不一定会生成对象的)
静态方法没有生成外围类对象,而普通方法已经有对象(有this)
**********************************
成员内部类的使用场景(lambda)
一个方法需要需要重写一个方法的值(继承或者接口)来作为返回值,或者用这个返回值调用方法的时候;
一个方法需要需要重写一个方法的值(继承或者接口)来作为形参的时候;
内部类访问外围类的变量;
意思就是局部变量int a= 10;被直接塞到方法(内部类的方法)里作为成员变量了.
1.静态方法里的局部内部类能不能静态属性;(不能)
2.方法里的局部内部类的加载时机会;(调用这个方法并且生成实例的时候)
部类的生命周期超过了方法中局部变量的生命周期,内部类可能会调用到已经消失的属性,因此内部类不能访问方法中的局部变量。 解决方法就是在局部变量前加修饰符final ,此时局部变量就会存在堆中,生命周期跟工程的生命周期是一样的,此时内部类就可以访问方法中的局部变量
匿名内部类
---
动物叫问题,需要一个子类运行一下重写方法,但是不创建类
作为形参(new cat),不想写cat的类了,就直接new了一个接口,然后重写接口的方法,就相当于是一个cat了,(一个实现类子类的对象),就可以用了(作为实际参数)
作为返回值再调重新的方法
匿名内部类就是得到的一个实现了/重写了的子类对象;
new 接口(){}.点 或者接受这个对象再点.
直接得到继承了父类的实现子类
------------------
Lambda表达式
lambda表达式返回值类型四种声明方式;
