gpt4 book ai didi

java - 在 Java 8 中,接口(interface)是否打破了封装的概念?

转载 作者:行者123 更新时间:2023-11-30 08:40:55 24 4
gpt4 key购买 nike

直到Java1.7,我很高兴地使用接口(interface)来实现OOPs概念封装。意味着如果我想对最终用户隐藏实现,那么我将只与他们共享接口(interface),他们可以使用该接口(interface)调用我的 API,例如 EJB。

以上在 Java 1.7 之前有效,现在在 Java 8 中,我可以在接口(interface)中编写方法的实现以及 defaultstatic 关键字,例如:

public interface Foo {

public abstract int someUnimplementedMethod();

default void printMsg() {
System.out.println("Hello...!");
}

static void sayHello() {
System.out.println("Hello...!");
}

}

这在 Java 1.8 中完全有效。

现在我的问题是:

  • 在 Java 8 中,我们是否正在尝试使用 defaultstatic 方法引入称为部分封装的东西?

  • 我知道你们中的一些人会争辩说,如果您不想共享实现,那么最好在子接口(interface)中提供 defaultstatic 实现并保留父接口(interface)带有抽象方法的接口(interface),但是现在不确定如果我用抽象方法编写接口(interface),新手可能只在接口(interface)中编写整个实现。所以它提出了一个问题,那么最好不要在接口(interface)中允许方法实现。

如果您不同意我的第二点,请提供解决方案。

顺便说一下,我已经阅读了Java documentation其中指出:

Default methods enable you to add new functionality to the interfaces of your libraries and ensure binary compatibility with code written for older versions of those interfaces.

最佳答案

我想说这些是我们在 Java 8 之前拥有的功能之上的附加功能

正如您所说,它是正确的 - 可以有一个默认 和静态(仅适用于接口(interface),不能被覆盖。)

From oracle ,When you extend an interface that contains a default method, you can do the following

  1. Not mention the default method at all, which lets your extended interface inherit the default method.
  2. Redeclare the default method, which makes it abstract.
  3. Redefine the default method, which overrides it.

所以我不知道该怎么调用它(是否部分封装),它们是默认实现并且可以被覆盖。隐藏实际实现仍然是这里的一个功能。

java.utils 中的集合使用默认方法来支持 lambda 表达式。现在在某些情况下它会有所帮助。

  1. 在很多应用程序中,我们需要一个基本实现类,然后我们扩展该类,即 BaseImplClass implements IsomeInterface 因此,您可以选择定义这些默认实现,而不是使用 BaseImplClass在您的界面中,如果需要可以覆盖它。

  2. 如果您有任何辅助类或实用类,您可以在接口(interface)中使用静态方法...这些方法是公共(public)的、最终的并且不能被覆盖

现在如果你想到可能会出现的菱形问题(如果一个类实现了具有相同默认方法签名的多个接口(interface),我们就会遇到模棱两可的情况。答案是否定的,在这种情况下你会在编译时出错。并且您必须覆盖该方法。

关于java - 在 Java 8 中,接口(interface)是否打破了封装的概念?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35394972/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com