引言:
在查看
Enumeration接口源码的时候,发现新增了一个方法,这个方法是有方法体的,并且用
default修饰的。这个修饰符看起来很陌生,查阅文档后,大概了解了些。
文档中说:
default methods enable you to add new functionality to the interfaces of your libraries and ensure binary compatibility with code written for older versions of those interfaces.
意思是默认方法能够向库的接口添加新功能,并确保与为这些接口的旧版本编写的代码兼容。并且不用在其子类进行逐个实现。Enumeration有94个子类,如果逐个实现真是痛苦。
实践:
动物接口:
public interface Animal {
/**
* 活动
* */
void play();
/**
* 进食
* */
default public void eat(){
System.out.println("它什么都吃!");
}
}
在接口中编写default修饰的方法时,可以有方法体,并且
必须有方法体 ! ! !
Cat类,实现Animal接口:
public class Cat implements Animal{
@Override
public void play() {
System.out.println("这只猫在睡懒觉!");
}
public static void main(String[] args) {
Animal cat = new Cat();
cat.eat();
cat.play();
}
}
这时,我没有实现eat方法(我感觉抽象类和接口之间的距离更近了一步)。
输出控制台:
接着,我把eat方法在Cat类中实现了:
@Override
public void eat() {
System.out.println("小家伙只吃猫粮!");
}
参考链接: https://docs.oracle.com/javase/tutorial/java/IandI/defaultmethods.html