所有像我一样的初学者总是会因为看到一个方法返回一个接口类型的对象而感到困惑,因为接口有抽象方法,因此无法实例化。
我终于找到了理解这个的方法:
((当我们说一个方法返回一个接口类型的对象时,我们实际上隐含地说该方法实际上返回了一个实现该接口的类的对象/实例,但在大多数情况下该类是未知的因为它在方法的实现中被声明为匿名。因此,我们将返回的对象称为该接口类型。))。
这个解释是否正确?
答案 0 :(得分:1)
" ...当我们说一个方法返回一个接口类型的对象时,我们实际上隐式表示该方法实际上返回了某个类的对象/实例实现该接口..." - 这是正确的,但我们说明确。
正如@Jon Skeet指出的那样,你的定义的第二部分是非常不正确的。在实现中应用匿名类是一个非常具体的案例。通常,返回界面会给你更多自由:
ArrayList
,则重写方法也必须返回ArrayList
或其子类。经验法则如下。如果具体类实现了接口,并且返回具体类对象(例如ArrayList
)没有任何好处,则返回接口 - List
,Collection
。这将增强代码的可维护性,即代码将来更容易更改。
答案 1 :(得分:0)
这是我这个月底的生日,所以我为所有朋友和家人添加了一种新方法:
public Present givePresent{
//code to select an appropriate and sufficiently expensive present
return present;
}
我可以在这做两件事。我可以写一个Present
类,并确保所有可能的礼物都扩展它。但是我们可以在这里遇到各种各样的问题:例如,BatmanComic
已经从ComicBook
继承而来,所以我们必须进一步向上移动,直到Present
为止基本上与Object
无法区分。另一种方法是看看这里发生了什么。我希望收到符合特定类别的内容,简而言之,Java有两种方法可以做到这一点。继承和接口。创建Present
作为接口实现与将其创建为抽象超类完全相同的目标,但避免了多重继承的所有问题。这样我所要做的就是编写一个接口:
public interface Present{
}
并确保所有袜子和书籍以及任何实施的内容。