【发布时间】:2020-06-01 16:36:32
【问题描述】:
我是 Java 的新手,我已经读到了教科书中关于接口的章节。但是,我看不到它们的用途/意义。我敢肯定它们并不是没用的,只是我不理解这个主题。
所以,接口就像抽象类,它们只命名方法,而不是它们的实现。书中提供的第一个示例讨论了class Shape、extended class rectangle,其想法是允许一种方法将矩形的最大边拉伸。于是代码开始:
public interface Stretchable {
void stretch( double factor );
{
然后他们描述了使用它的“点”
public class Rectangle extends Shape implements Stretchable
{
public void stretch( double factor )
{
if( factor <0 )
throw new IllegalArgumentException();
if( length > width )
length *= factor;
else
width*= factor;
}
}
但是,通过定义和实现一个接口,我看不到我在那里赢得了什么。接口只是void stretch( double factor);,我仍然必须在Rectangle 类中定义相同的东西。当我仍然必须从头开始定义接口的方法将在实现它的类中做什么时,这样做有什么好处?
【问题讨论】:
-
如果其他东西也可以拉伸怎么办?如果合作者可以在任何可伸缩的东西上进行操作并且不想依赖特定的实现怎么办?另请参阅the questions linked to the proposed dupe、this cross-site question 以及任何关于强类型语言的体面介绍。
-
将其称为“合同”,对您来说可能更有意义。
-
对于初学者来说,Java 不允许多重继承(基本上是因为diamond problem)所以你不能扩展多个类。您可以根据需要实现任意数量的接口,而不会出现此类问题。
-
接口对 Java 很有价值,因为它们允许开发人员独立于其实现来指定 API。例如。 Java Collections Framework 中的
Collection接口指定了许多实现它的类所使用的API:HashSet、ArrayList、TreeSet、SortedSet等。
标签: java oop generics inheritance interface