接口(一种特殊的抽象类)
是什么
- Interface定义接口
- 与类很相似 ,同级
类:单继承;接口:多实现 (比较灵活,便于后期维护)
- 继承:子类直接可以拿过来用,不需要重写;
接口:实现类必须先重写,因为(接口)只有功能,无方法体。
- 一般只定义方法(功能的集合)
怎么做:
Jdk1.7及之前
- 公共的静态常量:public static final 可以任意省略
- 公共的抽象方法:public abstract 可以任意省略
使用:
具体实现类:重写所有接口方法+按需新增
抽象实现类 (用abstract修饰):按需重写+按需新增 (需要子类继承 ,重写抽象方法)
- 类与接口 :实现关系
接口与接口:继承关系(多继承与多实现)
Jdk1.8之后
多了
- 静态方法 通过接口名调用
- 默认方法 通过实现对象调用
接口多态:只能调用接口中存在的内容,对实现类的新增内容不可见
内部类
定义在类中的类就叫内部类
- 成员内部类
在外部类成员位置,既有类的特征 ,也符合成员特征,不能定义静态内容(静态常量除外 )
内部类成员方法可以直接调用内部和外部成员;外部类成员方法可以直接调用外部成员,使用内部类成员需要通过创建对象来调用
同名时:块中直接用,内部类this.;外部类:外部类类名.调用
- 静态内部类
被static修饰 (非静态 )成员方法可以直接调用自己的成员和外部类的静态成员 ,外部类非静态成员需要对象调用
- 私有内部类
被private修饰,只能在自己的类和外部类中使用
- 局部内部类
定义在外部类方法中,
- 匿名内部类:实现+创建一步完成
- 只能使用一次
new Smoke(){//重写方法
}
- 可以多次调用
Smoke smoke=new Smoke(){//重写方法
}
- 可以作为方法实参
Test(new Smoke(){//重写方法
})
Lambda
定义:简化匿名内部类 ()->{}
():用来放参数
{}:用来放方法体
有5种写法:
1.()->{}
2.方法体只有一句时,{}可以省略
3.参数类型 可以省略,只写参数
4.参数只有一个时,()可以省略
5.方法有返回值时,return关键字可以省略