建议在看之前可以先看看接口那篇博客,如果是大神,忽略这句话~~
JDK8中为什么新添加了接口默认方法?
- 以前创建了一个接口,并且已经被大量的类实现。
- 如果需要再扩充这个接口的功能加新的方法,就会导致所有的实现类需要覆盖重写这个方法。
- 如果在接口中使用默认方法就不会有这个问题。
- 所以从 JDK8 开始新加了接口默认方法,便于接口方法的扩展。
接口升级问题:以前创建了一个接口,这个接口中的抽象方法比较少,现在需要向接口中添加更多的抽象方法。 |
---|
格式:public default 返回值类型 方法名称 (参数列表){
}
接口
public interface MyInterfaceDefault {
public abstract void method1();
public default void newmethod(){//新添加的默认方法
System.out.println("这是接口升级中添加的新方法");
}
}
实现类1
public class MyInterfaceDefaultA implements MyInterfaceDefault {
@Override
public void method1() {
System.out.println("AAA");
}
}
实现类2
public class MyInterfaceDefaultB implements MyInterfaceDefault {
@Override
public void method1() {
System.out.println("BBB");
}
}
实现类对象
public class InterfaceDefaultMain {
public static void main(String[] args) {
MyInterfaceDefaultA a = new MyInterfaceDefaultA();
MyInterfaceDefaultB b = new MyInterfaceDefaultB();
a.method1();
b.method1();
a.newmethod();//这是方法升级中添加的新方法
}
}
- 先看接口中,如果想向接口中添加新的方法,就添加默认方法,添加默认方法后所有的实现类不用改动,但在实现类对象中仍然可以通过继承调用。
- 如果没有接口默认方法,那么在接口中就只能定义抽象方法了,那所有的实现类都需要添加覆盖重写的抽象类方法,就太麻烦了。
注意:默认方法也可以再实现类中默认重写。