思考一个问题:能否new一个接口?
不可以。如果我们new了一个接口的对象,然后调用方法,因为方法没有定义,所以对象就不知道要干什么了,所以说问题出在没有方法体上!
那是不是我在new接口的时候,提供方法体就可以了?
这是对的,我们在new接口的时候只需要提供重写的方法就可以了。
接回调思想的内容,这种写法有一个缺陷:我为了实现一个方法,必须要搞一个类,代码如下:
interface Beauty {
void makeBeauty();
}
class HairWasher{
void hair(Beauty beauty){
System.out.println("洗完了");
beauty.makeBeauty();
}
}
class HairTeacher implements Beauty {
@Override
public void makeBeauty() {
System.out.println("做头发");
}
}
public class Entrance1 {
public static void main(String[] args) {
HairWasher hw=new HairWasher();
hw.hair(new HairTeacher());
}
}
接口Beauty只有一个方法,我们把Beauty的子类传给hair方法时hair方法内部也仅仅是调用了子类对应beauty的方法,所以我们想:我直接提供一个方法可以不?
等价代码如下:
interface Beauty {
void makeBeauty();
}
class HairWasher{
void hair(Beauty beauty){
beauty.makeBeauty();
}
}
public class Entrance2 {
public static void main(String[] args) {
HairWasher hw=new HairWasher();
hw.hair(new Beauty() {
@Override
public void makeBeauty() {
System.out.println("做头发");
}
});
}
}
简化写法:(参数列表)->{方法体}
public class Entrance2 {
public static void main(String[] args) {
HairWasher hw=new HairWasher();
hw.hair(()-> {
System.out.println("做头发");
});
}
}
如果方法体只有一行,那么甚至可以省略花括号
public class Entrance2 {
public static void main(String[] args) {
HairWasher hw=new HairWasher();
hw.hair(()-> System.out.println("做头发"));
}
}