Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 什么是程序到接口,而不是程序到实现_Java_Design Patterns - Fatal编程技术网

Java 什么是程序到接口,而不是程序到实现

Java 什么是程序到接口,而不是程序到实现,java,design-patterns,Java,Design Patterns,可能重复: 首先,我认为java中的接口和接口这两个术语有区别,我不太明白区别是什么 我的第一个问题是,当它说“编程到接口而不是实现”时,这是指接口还是java接口 我正在阅读headfirst设计模式,我对程序到接口而不是程序到接口感到困惑 实施我的理解是,子类是具体的实现,接口是 超类(接口、抽象类或simpleclass) 我的第二个问题是,当他们说接口的程序是指代码在接口(超类)中,然后子类继承了它??如果他们说程序到实现(子类),代码就在子类中?? 我之所以考虑这一点是因为术语“重用

可能重复:

首先,我认为java中的接口和接口这两个术语有区别,我不太明白区别是什么

我的第一个问题是,当它说“编程到接口而不是实现”时,这是指接口还是java接口

我正在阅读headfirst设计模式,我对程序到接口而不是程序到接口感到困惑 实施我的理解是,子类是具体的实现,接口是 超类(接口、抽象类或simpleclass)

我的第二个问题是,当他们说接口的程序是指代码在接口(超类)中,然后子类继承了它??如果他们说程序到实现(子类),代码就在子类中?? 我之所以考虑这一点是因为术语“重用”,因为若您更改了代码,并且代码位于子类(具体实现)中,那个么您需要更改所有子类代码,若您将代码放在接口中,那个么您只需要更改该接口中的代码

此外,接口和实现的程序示例(请简化)也会有所帮助


第三个问题如果我们编程到一个接口比编程到具体的类有什么好处?

首先,我必须说我没有读过那本书,所以我不能肯定这就是作者的意思,但这就是我理解这句话的方式

我对其含义的理解是,您应该以一种方式进行编程,将类和方法视为黑箱,不依赖于某些内部机制及其工作方式,而是依赖于您或其他人在接口、超类、文档中定义的规范,通过这种方式,您可以轻松地更改实现,而不会影响代码库的其余部分

一个很好的例子可能是存储一些数据的序列,比如名称。您可以定义函数来添加新名称、删除名称和打印名称。如果在下面这样的接口中定义这些函数,则可以使用它们,而不必担心实现它们的类是否使用数组或列表来存储它们

interface Sequence {
    void add(String s);
    void delete(String s);
    void print();
}
现在,您可以创建一个实现该接口的类SequenceAsList,并在应用程序中使用它。假设一切正常,但您现在决定,在某些地方,您可能提前知道sequnce中的项数,并且需要更好的性能,因此您希望使用数组而不是列表。因此,您可以创建另一个类SequnceAsArray,它也实现了Sequence接口。现在,您需要在代码中更改的所有内容都是

Sequence someSequence = new SequenceAsArray();
而不是

Sequence someSequence = new SequenceAsList();

因为他们遵循相同的界面,所以很容易做到这一点。因此,我认为作者主要建议的是采用这种将类和方法视为黑匣子的方法。

在Java接口中,不包含代码,只包含一些类必须实现的方法的定义,如果它们希望将自己与该接口的对象分组。欢迎使用StackOverflow。在发布您的问题之前,请花一两分钟搜索该网站。您问题的主题行与重复的@Birryrree链接完全匹配,您应该可以通过搜索轻松找到。保留重复问题有助于为编程问题保留一个有用(且整洁)的参考。您可能还需要几分钟的时间阅读,以获取更多信息,帮助您更有效地使用此网站。谢谢。:)