Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/378.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 - Fatal编程技术网

Java 抽象中隐藏的东西是什么?

Java 抽象中隐藏的东西是什么?,java,Java,大多数人说抽象是隐藏某些东西,只向用户显示功能。谁能解释一下你隐藏的东西是什么?你展示的东西是什么??请不要用动物、发动机、车辆的例子来解释。我认为在这种情况下,一个具体的例子会很有帮助 HashMap有一个用于处理哈希冲突的内部结构,它是一个单链表的实现。现在,你知道内部结构是如何工作的吗,它叫什么,它的字段叫什么,等等?更重要的是,只要HashMap“正常工作”,你在乎吗 如果这两个问题的答案都是“否”——这是出于好奇/学习目的之外的任何其他目的——那么这些细节已经对您隐藏起来,并通过地图界

大多数人说抽象是隐藏某些东西,只向用户显示功能。谁能解释一下你隐藏的东西是什么?你展示的东西是什么??请不要用动物、发动机、车辆的例子来解释。

我认为在这种情况下,一个具体的例子会很有帮助

HashMap有一个用于处理哈希冲突的内部结构,它是一个单链表的实现。现在,你知道内部结构是如何工作的吗,它叫什么,它的字段叫什么,等等?更重要的是,只要HashMap“正常工作”,你在乎吗

如果这两个问题的答案都是“否”——这是出于好奇/学习目的之外的任何其他目的——那么这些细节已经对您隐藏起来,并通过地图界面的抽象暴露出来


结果是一个类更容易推理(因为你要学的东西更少),库维护人员也更容易维护(因为他们不需要担心修改会破坏你的代码,只要他们仍然遵守接口)。

抽象是一个重载术语

在面向对象语言中,抽象基本上意味着在对真实世界对象建模时忽略不必要的细节。你也可以把它看作是一个简化的过程

抽象,在整个计算机科学中,也意味着通过提供某种简单的接口来隐藏复杂性。您的问题似乎是针对“数据抽象”,这意味着隐藏用抽象层表示数据的确切方式。例如,这可能是数据库中的数字数据类型。您只知道它是一个数字,但不知道它是如何存储在磁盘上的


抽象有时也等同于封装

您隐藏了实现细节并公开了一个公共API。可能重复使用动物、引擎或车辆的错误?您的示例已关闭。抽象不是关于隐藏
HashMap
的内部,而是关于将实现与API(契约)分离,例如
Map
API可以通过
HashMap
TreeMap
@Andreas实现。它是关于从树映射中分离哈希映射;在更细粒度的层次上,它还涉及将具有链表冲突解决策略的HashMap与具有其他解决策略的HashMap分离;在更精细的层次上,它是关于将具有链表解析策略的HashMap与具有这种特定链表解析策略的HashMap分离开来。我想说的是,我的示例在很大程度上是一个将实现与API分离的示例(Map API和通常的HashMap API都没有提到,例如,
HashMap.Entry.key