非原创,知识总结性文章
1、default关键字
在接口中可以通过使用default关键字编写方法体,实现类可以不用实现该方法,可以进行直接调用。
描述
default是在java8中引入的关键字,也可称为Virtual extension methods——虚拟扩展方法。
是指,在接口内部包含了一些默认的方法实现(也就是接口中可以包含方法体,这打破了Java之前版本对接口的语法限制),从而使得接口在进行扩展的时候,不会破坏与接口相关的实现类代码。
作用
之前的接口是个双刃剑。
好处是面向抽象而不是面向具体编程,缺陷是,当需要修改接口时候,需要修改全部实现该接口的类。默认方法使得开发者可以在不破坏二进制兼容性的前提下,往现存接口中添加新的方法,即不强制那些实现了该接口的类也同时实现这个新加的方法。
二进制兼容性:所谓“二进制兼容性”指的就是在升级(也可能是 bug fix)库文件的时候,不必重新编译使用这个库的可执行文件或使用这个库的其他库文件,程序的功能不被破坏。
使用方法
1、继承接口,实现接口
publicinterface Interface1{
defaultvoid helloWorld() {
System.out.println("Interface1");
}
}
public class MyImplement implements Interface1{
public static void main(String[] args) {
MyImplement myImplement = new MyImplement();
//直接调用helloWorld()方法
myImplement.helloWorld();
}
}
2、同时实现两个有同名默认方法的接口
public interface Interface2{
default void helloWorld() {
System.out.println("Interface2");
}
}
/**
* 实现接口Interface1,Interface2
*/
public class MyImplement implements Interface1,Interface2{
public static void main(String[] args) {
MyImplement myImplement = new MyImplement();
//直接调用helloWorld()方法
myImplement.helloWorld();
}
}
报错,不知道该调用哪个方法。解决办法:在实现类中重写该方法。
3、类优于接口
public class MyImplement2 extends MyImplement implements Interface2{
public static void main(String[] args) {
MyImplement2 myImplement2 = new MyImplement2();
myImplement2.helloWorld();
}
}
会调用父类方法。