在Java中,接口是一种规范,用于定义类应该实现的方法。在Java 8中,引入了default方法(也称为默认方法或扩展方法),允许在接口中定义具有默认实现的方法。
default方法是在接口中声明的方法,但它具有一个默认的实现。这意味着如果一个类实现了该接口但不实现default方法,它将使用接口中的默认实现。这使得我们可以向接口中添加新的方法,而不破坏已有的实现类。
默认方法可以使用关键字default声明,并且必须提供一个默认的实现。例如:
public interface MyInterface {
void myMethod();
default void myDefaultMethod() {
System.out.println("This is a default method.");
}
}
在上面的例子中,接口`MyInterface`定义了一个抽象方法`myMethod`,以及一个默认方法`myDefaultMethod`。实现该接口的类可以选择实现`myMethod`方法,但是默认会继承接口中的`myDefaultMethod`方法。
使用default方法的主要好处是可以向已有的接口添加新的方法,而不需要改变已有的实现类。这样可以确保与现有代码的向后兼容性。
注意,接口中的default方法是可以被实现类覆盖的。如果一个类实现了多个接口,而这些接口有相同的默认方法,那么实现类必须覆盖这个默认方法,提供自己的实现。
public interface MyInterface1 {
default void myMethod() {
System.out.println("This is a default method from MyInterface1.");
}
}
public interface MyInterface2 {
default void myMethod() {
System.out.println("This is a default method from MyInterface2.");
}
}
public class MyClass implements MyInterface1, MyInterface2 {
@Override
public void myMethod() {
System.out.println("This is my own implementation.");
}
}
在上面的例子中,`MyClass`类实现了`MyInterface1`和`MyInterface2`接口,并覆盖了它们的默认方法`myMethod`。当调用`myMethod`时,会输出`This is my own implementation.`。
总结:default方法是在接口中声明的方法,具有默认的实现。它可以为接口添加新的方法而不破坏已有的实现类,同时允许实现类覆盖默认方法提供自己的实现。