java - 将调用接口(interface)实现的哪个对象方法

标签 java interface polymorphism

我的项目中有如下代码。这里通过接口(interface)转换,我们调用服务 IAuthenticateService 的方法authenticate()。现在有 5 个子类,它们具有相同的方法实现并实现相同的接口(interface) IAuthenticateService。通过查看代码,我如何知道调用了哪个类方法实现?我对界面设计有点困惑。

((IAuthenticateService) AuthServiceApp.getInstance().getContext()
                    .getService(ServiceEnum.CredentialService.name()))
                    .authenticate(inputParams);

最佳答案

仅仅通过阅读这段代码你无法知道。

但是,程序会在运行时知道要调用哪个实现:AuthServiceApp.getInstance().getContext() 返回的对象将具有一种类型,哪个类型将具有该类型的单个实现方法getService,并且该实现将被调用。

作为一名程序员,你不需要了解更多。 programming by contract范例使您不必担心将调用哪个实现。您需要知道的是,在给定特定环境的情况下,您将获得一个可以在其上调用 getService() 的上下文实例,并且它将为您提供服务。

剩下的就是细节了,你不用担心。

当然,当您进行调试时,情况就不同了:您想知道执行了哪个实现,因为它可能有错误。在这种情况下,只需跟随调试器查看真正执行了哪些代码,但除此之外,您不应该关心,这就是多态性的全部内容:获得抽象。

关于java - 将调用接口(interface)实现的哪个对象方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23036395/

相关文章:

java - 如何正确扩展和实现Java泛型接口(interface)

c++ - 在 C++11 中声明接口(interface)的最佳方法

go - 返回带有数据成员的多态类型

java - Jackson typeId 不包含在生成的 json 中

java - 按存在的数字对文本文件的行进行排序,并按降序输出整行

java - 应用程序中的每个类应该如何检索 Spring 应用程序上下文?

java - 为什么我的 up 函数将输入更改为 Java 中 block 的输入

java - Implements 只能与接口(interface)一起使用吗?

java - 用对象声明和实例化解释面向对象编程

java - 通过动态参数反射调用方法