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/12/17 浏览次数:217 分类:Java
-
本篇文章主要介绍如何在 Java 中制造程序延迟。本教程介绍了如何在 Java 中制造程序延时,并列举了一些示例代码来了解它。
如何在 Java 中把 Hashmap 转换为 JSON 对象
发布时间:2023/12/17 浏览次数:187 分类:Java
-
它描述了允许我们将哈希图转换为简单的 JSON 对象的方法。本文介绍了在 Java 中把 Hashmap 转换为 JSON 对象的方法。我们将看到关于创建一个 hashmap,然后将其转换为 JSON 对象的详细例子。
如何在 Java 中按值排序 Map
发布时间:2023/12/17 浏览次数:171 分类:Java
-
本文介绍了如何在 Java 中按值对 Map 进行排序。本教程介绍了如何在 Java 中按值对 Map
进行排序,并列出了一些示例代码来理解它。
如何在 Java 中打印 HashMap
发布时间:2023/12/17 浏览次数:192 分类:Java
-
本帖介绍了如何在 Java 中打印 HashMap。本教程介绍了如何在 Java 中打印 HashMap 元素,还列举了一些示例代码来理解这个主题。
在 Java 中更新 Hashmap 的值
发布时间:2023/12/17 浏览次数:146 分类:Java
-
本文介绍了如何在 Java 中更新 HashMap 中的一个值。本文介绍了如何在 Java 中使用 HashMap 类中包含的两个方法-put() 和 replace() 更新 HashMap 中的值。
Java 中的 hashmap 和 map 之间的区别
发布时间:2023/12/17 浏览次数:79 分类:Java
-
本文介绍了 Java 中的 hashmap 和 map 接口之间的区别。本教程介绍了 Java 中 Map 和 HashMap 之间的主要区别。在 Java 中,Map 是用于以键值对存储数据的接口,
在 Java 中获取用户主目录
发布时间:2023/12/17 浏览次数:218 分类:Java
-
这篇文章向你展示了如何在 Java 中获取用户主目录。本教程介绍了如何在 Java 中获取用户主目录,并列出了一些示例代码以指导你完成该主题。
Java 中 size 和 length 的区别
发布时间:2023/12/17 浏览次数:179 分类:Java
-
这篇文章教你如何知道 Java 中大小和长度之间的区别。本教程介绍了 Java 中大小和长度之间的区别。我们还列出了一些示例代码以帮助你理解该主题。
Java 中的互斥锁
发布时间:2023/12/17 浏览次数:111 分类:Java
-
了解有关 Java 中互斥锁的一切,在计算机科学领域,互斥或互斥被称为并发控制的属性。每台计算机都使用称为线程的最小程序指令序列。有一次,计算机在一个线程上工作。为了更好地理解,