匿名内部类格式以及lambda表达式
new Animal (){
//重写方法
public void eat(){
System.out.println("吃骨头");
}
};
实际上匿名内部类 是一个没有名字的类,是写在类里面的类 起始在{ 到最后的} ,通过实现接口或者继承父类重写方法 以及new关键字 生成了一个对象
用途:当需要生成一个对象来实现接口或继承时,此对象又不需要重复调用,则可以生成一个匿名内部类的对象,多用于多态。
多态的时候 如果要使用方法 则遵循 编译看左边 运行看右边 因为对方法进行了重写
public class Lambda {
//匿名内部类的优化形式
/*简化代码
lambda 只能简化 函数式接口 : 抽象方法有且只有一个的 接口 标注是@FunctionalInterface 就证明是函数式接口
* */
public static void main(String[] args) {
String [] arr ={"a","aaaa","aa","aaa"};
//按照数组长度 由小到大排序
// Arrays.sort(arr, new Comparator<String>() {
// @Override
// public int compare(String o1, String o2) {
// return o1.length()-o2.length();
// }
// }); //lambda完整格式 将匿名内部类的整个 从new到形参删掉 还有后面的一个花括号,形参和方法体中间打个->就可以了
Arrays.sort(arr, (String o1, String o2)-> {
return o1.length()-o2.length();
}
);
System.out.println(Arrays.toString(arr));
}
}