内部类
一、成员内部类
定义:成员内部类不能使用静态方法和成员变量。只能使用 静态 常量。
成员内部类拥有成员的特性和类的特性(继承、实现)
使用:
使用内部类需要通过外部类对象使用
二、静态内部类
定义:静态内部类可以拥有静态成变量和静态方法、成员变量和成员方法
使用:静态内部类使用外部类成员变量和方法需要创建外部类的对象,当然外部类要使用静态内部类的成员变量和成员方法也需要通过内部类的对象使用。外部类可以直接使用内部类中的静态成员变量和方法。
三、局部内部类
定义:定义在外部类的方法中
使用:只能在定义的方法中使用,如果要使用方法的参数,那么这个参数需要被final修饰
四、匿名内部类
匿名内部类的使用可以简化实现,子类,不浪费类名
//游泳接口
interface Swim{
void swimming();
void sleep();
}
//匿名内部类 1) 只能使用一次
new Swim(){ //匿名内部类-->作为Swim接口实现类的类体
public void swimming() {
System.out.println("自由泳...");
}
public void sleep() {
System.out.println("边有用边睡觉..");
}
}.sleep();
//2.引用指向匿名内部类对象
Swim s=new Swim(){ //接口多态
public void swimming() {
System.out.println("自由泳...");
}
public void sleep() {
System.out.println("边有用边睡觉..");
}
};
s.swimming();
s.sleep();
//3)匿名内部类作为方法的参数使用
static void test(Swim s){
s.swimming();
}
test(new Swim(){
@Override
public void swimming() {
System.out.println("哈哈哈哈");
}
@Override
public void sleep() {
// TODO Auto-generated method stub
}
});
Lambda
当接口只有一个方法时可以使用lambda表达式:JDK1.8的新特性
接口 变量=()->{};
()中放重写方法的参数
{}放重写的方法
-> lambda符号
1、当{}语句体只有一句时可以省略{}; 接口 变量=()->方法体;
2、()中的数据类型可省略;接口 变量=(int a,double b)->方法体;=>接口 变量=(a,b)->方法体;
3、()括号中的参数只有一个可以省略();=>接口 变量=a->方法体;
4、当方法体有返回值且只有返回值时:接口 变量=()->返回值;