一.首先了解什么是类实现接口?
非抽象子类实现接口:
1.必须重写接口中所有抽象方法
2.继承了接口的默认方法,即可以直接调用,也可以重写。
先定义一个接口LiveAble
public interface LiveAble {
public void eat();
public void sleep();
}
Animal子类实现接口,重写所有方法
public class Animal implements LiveAble {
@Override
public void eat() {
System.out.println("吃东西");
}
@Override
public void sleep() {
System.out.println("睡觉觉");
}
}
创建子类对象
public class test {
public static void main(String[] args) {
Animal animal = new Animal();
animal.eat();//吃东西
animal.sleep();//睡觉觉
}
}
二.接着了解什么是匿名内部类
匿名内部类必须继承一个父类或者实现一个父接口。
省去了类的定义。
public interface LiveAble {
public void fly();
}
public class test {
public static void main(String[] args) {
//正常写法
/*Animal animal = new Animal();
animal.fly();//飞高高*/
//匿名内部类,把实现父类接口的子类对象匿名了。即Animal没了
LiveAble liveAble=new LiveAble() {
@Override
public void fly() {
System.out.println("飞高高");
}
};
liveAble.fly();//飞高高
}
}
三.函数式接口是Lambda表达式的使用前提
函数式接口:有且仅有一个抽象方法的接口。
public class test {
public static void main(String[] args) {
//Lambda
LiveAble liveAble=()-> {
System.out.println("飞高高");
};
liveAble.fly();//飞高高
}
}
简化:
public class test {
public static void main(String[] args) {
//Lambda
LiveAble liveAble=()-> System.out.println("飞高高")
liveAble.fly();//飞高高
}
}
简化规则:
1.小括号内参数类型可以省略
2.如果小括号内有且仅有一个参数,小括号也可以省略
3.如果大括号里有且仅有一条语句,无论是否有返回值,都可以省略大括号,return关键字和分号。