首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >返回接口类型的对象的方法

返回接口类型的对象的方法
EN

Stack Overflow用户
提问于 2017-10-01 16:18:59
回答 2查看 1.5K关注 0票数 0

像我这样的初学者,看到一个方法返回一个接口类型的对象总是会感到困惑,因为接口有抽象的方法,因此不能实例化。

我终于想出了一个理解这个问题的方法:

(当我们说一个方法返回一个接口类型的对象时,我们实际上含蓄地说该方法实际上返回实现该接口的某个类的对象/实例,但在大多数情况下,该类是未知的,因为它在方法的实现中被声明为匿名。因此,我们将返回的对象称为该接口类型。)。

这个解释正确吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-10-01 17:30:42

"...when --我们说一个方法返回一个接口类型的对象,我们实际上是隐式,它实际上返回实现该接口的某个类的对象/实例……“--这是正确的,但我们将其称为显式

正如@Jon所指出的,你定义的第二部分是完全不正确的。在实现中应用匿名类是一个非常特殊的情况。通常,返回一个接口会给您更多的自由:

  • 可以更改方法的实现以返回实现相同接口的另一个对象,而无需更改使用此方法的代码。
  • 您可以将类扩展到重写方法,以便它返回实现相同接口的另一个对象。在这里,您实际上可以更改返回类型。如果基类的方法返回具体类(例如ArrayList ),则重写的方法也必须返回ArrayList或其子类。

经验法则如下。如果具体的类实现了一个接口,并且返回一个具体的类对象(例如ArrayList )没有好处,那么返回一个接口-- ListCollection。这将增强代码的可维护性,也就是说,代码将来将更容易更改。

票数 1
EN

Stack Overflow用户

发布于 2017-10-01 17:18:12

这个月底是我的生日,所以我给我所有的朋友和家人增加了一个新的方法:

代码语言:javascript
复制
public Present givePresent{
    //code to select an appropriate and sufficiently expensive present
    return present;
}

我可以在这里做两件事。我可以编写一个Present类,并确保所有可能的礼物都可以扩展它。但是我们在这里可能会遇到各种各样的问题:例如,BatmanComic已经继承了ComicBook,所以我们必须在树上越走越远,直到PresentObject基本上无法区分为止。另一种方法是观察这里到底发生了什么。我希望收到一些适合特定类别的内容,简而言之,Java有两种方法可以做到这一点。继承和接口。将Present作为接口创建与创建抽象超类完全相同,但避免了多重继承的所有问题。这样,我所要做的就是编写一个接口:

代码语言:javascript
复制
public interface Present{
}

确保所有的袜子和书还有其他的东西。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46514337

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档