gpt4 book ai didi

java - 编程到接口(interface)是什么意思?

转载 作者:IT老高 更新时间:2023-10-28 21:03:05 25 4
gpt4 key购买 nike

我一直在大多数与编程相关的网站上听到这种说法:

Program to an interface and not to an Implementation

但是我不明白其中的含义?
示例会有所帮助。

编辑:我收到了很多很好的答案,您能否补充一些代码片段以便更好地理解该主题。谢谢!

最佳答案

您可能正在寻找这样的东西:

public static void main(String... args) {
// do this - declare the variable to be of type Set, which is an interface
Set buddies = new HashSet();

// don't do this - you declare the variable to have a fixed type
HashSet buddies2 = new HashSet();
}

为什么第一种方式被认为是好的?假设稍后您决定需要使用不同的数据结构,例如 LinkedHashSet,以便利用 LinkedHashSet 的功能。必须像这样更改代码:

public static void main(String... args) {
// do this - declare the variable to be of type Set, which is an interface
Set buddies = new LinkedHashSet(); // <- change the constructor call

// don't do this - you declare the variable to have a fixed type
// this you have to change both the variable type and the constructor call
// HashSet buddies2 = new HashSet(); // old version
LinkedHashSet buddies2 = new LinkedHashSet();
}

这似乎并没有那么糟糕,对吧?但是如果你用同样的方式写 getter 呢?

public HashSet getBuddies() {
return buddies;
}

这也必须改变!

public LinkedHashSet getBuddies() {
return buddies;
}

希望您看到,即使是这样的小程序,您对声明变量类型的内容也有深远的影响。由于对象来回移动如此之多,如果您仅依赖于被声明为接口(interface)的变量,而不是该接口(interface)的特定实现(在这种情况下,将其声明为Set,而不是 LinkedHashSet 或其他)。可以是这样的:

public Set getBuddies() {
return buddies;
}

还有另一个好处,那就是(至少对我而言)这种差异有助于我更好地设计程序。但希望我的示例能给您一些想法……希望对您有所帮助。

关于java - 编程到接口(interface)是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1413543/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com