admin 管理员组

文章数量: 887021


2024年1月11日发(作者:mybase使用教程)

接口中的默认方法

接口中的默认方法是指在接口中定义的具有方法体的方法。在Java 8之前,接口中只能定义抽象方法,也就是没有方法体的方法。但是,随着Java 8的推出,引入了默认方法的概念,使得接口中可以定义具有默认实现的方法。

默认方法的引入是为了解决接口的演化性问题。假设在一个已经发布的接口中需要新增一个方法,如果直接在接口中添加新方法,则已经实现该接口的类都需要实现新增的方法,这就导致了代码改动的麻烦。但是,如果使用默认方法,则已经实现该接口的类可以继承默认方法的实现,避免了代码改动的问题。

接口中的默认方法使用关键字default进行修饰,其语法如下:

public interface MyInterface {

default void myMethod() {

方法体

}

}

接口中的默认方法具有以下特点:

1. 默认方法可以有方法体,即可以直接在接口中定义具体的方法逻辑。

2. 默认方法使用default关键字进行修饰。

3. 默认方法可以被实现该接口的类继承,并可以通过实现类的对象调用。

4. 默认方法可以被重写,即在实现类中可以重新定义默认方法的实现逻辑。

接口中的默认方法在实际开发中有以下应用场景:

1. 接口的演化性问题:当一个接口需要新增方法时,可以通过添加默认方法的方式来避免已经实现该接口的类全部修改实现逻辑。

2. 提供接口的默认实现:接口中的默认方法可以提供方法的默认实现,使得实现类可以直接使用默认实现,而不需要重复实现相同的逻辑。

3. 多继承冲突解决:在Java中,一个类可以实现多个接口,如果多个接口中有同名的默认方法,此时实现类必须重写该方法并提供自己的实现逻辑。

在默认方法的继承与重写过程中,有以下规则需要注意:

1. 类优先原则:如果一个类继承了多个接口,而这些接口中有相同的默认方法,则该类会优先使用自己类中的方法。

2. 接口冲突原则:如果一个接口继承了多个接口,而这些接口中有相同的默认方法,则该接口必须重写该默认方法,并提供自己的实现逻辑。

下面通过一个简单的例子来演示默认方法的使用:

java

public interface MyInterface {

default void myMethod() {

n("默认方法");

}

}

public class MyClass implements MyInterface {

MyClass继承了MyInterface接口,可以直接使用myMethod方法的默认实现

也可以重写myMethod方法,提供自己的实现

@Override

public void myMethod() {

n("重写的方法");

}

}

public class Main {

public static void main(String[] args) {

MyInterface obj1 = new MyClass();

od(); 输出:重写的方法

MyInterface obj2 = new MyInterface() {

实现一个匿名内部类来实现接口,并重写myMethod方法

@Override

public void myMethod() {

n("匿名类的方法");

}

};

od(); 输出:匿名类的方法

}

}

在上面的例子中,接口MyInterface定义了一个默认方法myMethod。然后,类MyClass实现了接口MyInterface,可以选择是否重写myMethod方法。在主函数中,首先创建了MyClass的实例obj1,然后调用obj1的myMethod方法,输出结果为"重写的方法"。接着,通过匿名内部类的方式创建了一个实现MyInterface接口的匿名类的对象obj2,调用obj2的myMethod方法,输出结果为"匿名类的方法"。

总结来说,接口中的默认方法为接口的演化性提供了解决方案,使得接口的修改不再对已有代码造成影响。同时,接口的默认方法也为多继承冲突的解决提供了一种机制。在实际开发中,合理使用接口中的默认方法,可以提高代码的复用性和可维护性。


本文标签: 方法 接口 默认 实现 使用