Java中的接口默认方法
本文介绍如何在Java中使用接口中的默认方法。
Java中的接口默认方法
在接口只有抽象方法之前,Java 8 就引入了默认方法。 默认或防御方法允许开发人员在不破坏实现的情况下向接口添加新方法。
默认方法提供了允许接口定义实现的灵活性。 在类未能提供该方法的实现的情况下,此实现将被视为默认实现。
让我们尝试使用默认方法创建一个接口:
package jiyik;
public interface Demo_Interface {
public void Existing_Method();
default public void Default_Method() {
System.out.println("a default method is added to the interface");
}
}
上面的代码向接口添加了一个默认方法。 让我们尝试另一个例子来展示默认方法是如何工作的:
package jiyik;
interface Demo_Interface {
// The abstract method
public void cube(int x);
// The default method
default void show() {
System.out.println("Default Method is Executed");
}
}
public class Example implements Demo_Interface {
// The implementation of an abstract method
public void cube(int x) {
System.out.println(x*x*x);
}
public static void main(String args[]) {
Example Demo = new Example();
Demo.cube(6);
// execute default method.
Demo.show();
}
}
上面的代码创建了一个抽象方法来计算整数的立方,并创建了一个默认方法来显示输出。 查看输出:
216
Default Method is Executed
默认方法与抽象类
接口和抽象类中的默认方法的行为方式相同,但它们有一些区别:
- 抽象类可以定义构造函数,而可以实现默认方法来调用其他接口。
- 抽象类更加结构化,状态可以与它们相关联。 同时,默认方法不引用特定实现的状态。
默认方法与常规方法
默认方法与常规方法不同。 主要区别是:
- 类中的常规方法可以修改类的方法参数和字段。 相反,默认方法只能访问自己的参数,因为接口没有任何状态。
- 常规方法需要破坏实现才能向类添加新功能,而默认方法可以在不破坏实现的情况下向接口添加新功能。
- 我们可以将默认方法重新声明为抽象方法,强制子类重写它们。
默认方法和多重继承
众所周知,Java 中只能通过接口实现多重继承。 现在,Java 类可以有多个接口,每个接口都可以定义具有相同方法签名的默认方法,从而在继承的方法之间产生冲突。
参见示例:
package jiyik;
interface Interface_One {
default void defaultMethod(){
System.out.println("Interface One default method");
}
}
interface Interface_Two {
default void defaultMethod(){
System.out.println("Interface Two default method");
}
}
public class Example implements Interface_One, Interface_Two {
}
上面的代码会出现编译错误。 查看输出:
java: class Example inherits unrelated defaults for defaultMethod() from types Interface_One and Interface_Two
对于这个错误有一个简单的解决方案; 我们需要在类Example中提供一个默认的方法实现。 参见示例:
package jiyik;
interface Interface_One {
default void defaultMethod(){
System.out.println("Interface One default method");
}
}
interface Interface_Two {
default void defaultMethod(){
System.out.println("Interface Two default method");
}
}
public class Example implements Interface_One, Interface_Two {
public void defaultMethod(){
}
}
这将解决问题。 此外,如果你想从类中的超级接口调用默认方法,你可以使用:
package jiyik;
interface Interface_One {
default void defaultMethod(){
System.out.println("Interface One default method");
}
}
interface Interface_Two {
default void defaultMethod(){
System.out.println("Interface Two default method");
}
}
public class Example implements Interface_One, Interface_Two {
public void defaultMethod(){
// other code
Interface_One.super.defaultMethod();
}
}
相关文章
Java 中的静态接口
发布时间:2023/08/01 浏览次数:73 分类:Java
-
请注意,当接口是嵌套的或另一个接口的子接口时,您可以将接口声明为静态。在 Java 的嵌套接口中使用 static
在 Java 中使用索引和 forEach
发布时间:2023/08/01 浏览次数:135 分类:Java
-
在本文中,我们将学习如何将 forEach() 函数与索引组合一起使用。 此外,我们将通过使用必要的示例和解释来涵盖该主题,以使该主题更容易。
Java 中的并行处理
发布时间:2023/08/01 浏览次数:127 分类:Java
-
在本文中,我们将了解 Java 中的并行处理,以及必要的示例和解释,以使主题变得更容易。并行处理和顺序处理之间的区别
Java 中的装饰器
发布时间:2023/08/01 浏览次数:80 分类:Java
-
装饰器设计模式使用户能够动态添加功能并设置对象的行为,而不影响其对象的行为。 为了扩展类的行为,装饰器大多使用继承。
将InputStream转换为Java中的文件对象
发布时间:2023/08/01 浏览次数:105 分类:Java
-
我们将根据 Java 版本,使用不同的方式编写不同的示例代码,将 InputStream 转换为 File 对象。 下面给出了一些方法:使用纯Java将InputStream转换为文件对象
Java 中的八皇后问题
发布时间:2023/08/01 浏览次数:188 分类:Java
-
本文介绍了 Java 中的八皇后问题。Java 中的八皇后问题 八皇后问题是我们必须将八个皇后放置在 8x8 的棋盘上,并且不能互相攻击。
在 Java 中反序列化 JSON
发布时间:2023/08/01 浏览次数:99 分类:Java
-
本文介绍如何在 Java 中反序列化 JSON。在 Java 中反序列化 JSON 提供了用于 JSON 操作的不同库。 这些库还可以在 Java 中序列化和反序列化 JSON 对象。
在 Java 中将对象序列化为 JSON
发布时间:2023/07/21 浏览次数:197 分类:Java
-
本文介绍了如何使用 Java-JSON 和 Jackson API 在 Java 中将对象序列化为 JSON。在 Java 中将对象序列化为 JSON 提供了用于 JSON 操作的不同库。