gpt4 book ai didi

java - 2个不同的java类,完全相同的方法,但一个实现了一个接口(interface)

转载 作者:行者123 更新时间:2023-11-29 03:22:08 25 4
gpt4 key购买 nike

假设,有两个java类。

BaseA

public class BaseA extends ModuleBase{
public void doSomething{
//does something
}

}

BaseB

public class BaseB extends ModuleBase implements
SomeInterface {
public void doSomething{
//does something
}

}

一些接口(interface)

public interface SomeInterface {
public void doSomething();
}

因此您可以看到 BaseABaseB 之间的唯一区别是 BaseB 实现了一个接口(interface)。据我所知,接口(interface)是一种引用类型,类似于类,它只能包含常量、方法签名、默认方法、静态方法和嵌套类型。它不能被实例化。

问题:

  1. 似乎 BaseABaseA 与它们的方法和代码相同。对吗?
  2. 接口(interface)似乎是一份契约(Contract),阐明了软件 API 如何相互交互并且对类功能没有影响。接口(interface)的唯一目的是强制 BaseB 强制执行 doSomething,而对于 BaseA,它的可选 & 不会产生编译错误。如果不是,那为什么?
  3. 实现接口(interface)有什么不同?我知道您必须实现该特定接口(interface)的所有方法,但如果您也可以在不使用关键字 implements InterfaceName 的情况下实现,如 BaseBBaseA 我们在其中实现了完全相同的 doSomething()。在类声明中使用关键字 implements InterfaceName 有什么区别?

最佳答案

  1. 没有。 Java 中的类在具有相同的完全限定名称并且从相同的类加载器加载时是相同的。 Java 不尝试研究方法,也不比较方法签名。

    或者换句话说:Java 不支持 duck typing .

  2. 通常,接口(interface)用于使一堆类可以轻松互换。所以你有一些需要特定功能的东西。您可以使用接口(interface),而不是将其键入单个类。使用该服务的人可以根据自己的需要为其提供不同的类,从而使该服务更加灵活(也更难理解)。

  3. 这意味着您可以在需要InterfaceName 的任何地方使用BaseB。这使得 BaseB(以及从中派生的所有内容)更加有用/强大。

例子:

如果你想检查密码,你可以写一个PasswordService类。但这意味着每个人都必须使用这个类并忍受这些限制。

如果您提供一个PasswordService接口(interface),那么您的代码的用户可以有不同的实现:他们可以从文件、数据库、LDAP 等获取密码,或者对于单元测试,他们可以编写一个服务,对每个密码说是或否。

关于java - 2个不同的java类,完全相同的方法,但一个实现了一个接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23009312/

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