像我这样的初学者,看到一个方法返回一个接口类型的对象总是会感到困惑,因为接口有抽象的方法,因此不能实例化。
我终于想出了一个理解这个问题的方法:
(当我们说一个方法返回一个接口类型的对象时,我们实际上含蓄地说该方法实际上返回实现该接口的某个类的对象/实例,但在大多数情况下,该类是未知的,因为它在方法的实现中被声明为匿名。因此,我们将返回的对象称为该接口类型。)。
这个解释正确吗?
发布于 2017-10-01 17:30:42
"...when --我们说一个方法返回一个接口类型的对象,我们实际上是隐式,它实际上返回实现该接口的某个类的对象/实例……“--这是正确的,但我们将其称为显式。
正如@Jon所指出的,你定义的第二部分是完全不正确的。在实现中应用匿名类是一个非常特殊的情况。通常,返回一个接口会给您更多的自由:
ArrayList ),则重写的方法也必须返回ArrayList或其子类。经验法则如下。如果具体的类实现了一个接口,并且返回一个具体的类对象(例如ArrayList )没有好处,那么返回一个接口-- List,Collection。这将增强代码的可维护性,也就是说,代码将来将更容易更改。
发布于 2017-10-01 17:18:12
这个月底是我的生日,所以我给我所有的朋友和家人增加了一个新的方法:
public Present givePresent{
//code to select an appropriate and sufficiently expensive present
return present;
}我可以在这里做两件事。我可以编写一个Present类,并确保所有可能的礼物都可以扩展它。但是我们在这里可能会遇到各种各样的问题:例如,BatmanComic已经继承了ComicBook,所以我们必须在树上越走越远,直到Present与Object基本上无法区分为止。另一种方法是观察这里到底发生了什么。我希望收到一些适合特定类别的内容,简而言之,Java有两种方法可以做到这一点。继承和接口。将Present作为接口创建与创建抽象超类完全相同,但避免了多重继承的所有问题。这样,我所要做的就是编写一个接口:
public interface Present{
}确保所有的袜子和书还有其他的东西。
https://stackoverflow.com/questions/46514337
复制相似问题