当前位置: 首页 > 面试题库 >

Java 抽象和封装之间的区别?

程赞
2023-03-14
问题内容

封装和抽象之间的确切区别是什么?


问题答案:

这里的大多数答案都集中在OOP上,但封装要早得多:

每个函数都是一个封装 ; 用伪代码:

point x = { 1, 4 }
point y = { 23, 42 }

numeric d = distance(x, y)

这里,distance封装了平面中两点之间的(欧几里得)距离的计算:隐藏了实现细节。这是封装,纯净而简单。

抽象是泛化的过程:采取具体的实现方式并将其应用于不同的(尽管有些相关)数据类型。抽象的经典示例是C的qsort数据排序功能:

关于的事情qsort是,它不关心排序的数据-实际上,它不知道排序的数据。而是,它的输入类型是无类型指针(void*),这只是C所说的“我不在乎数据类型”(也称为类型擦除)。重要的一点是qsort,无论数据类型如何,始终保持不变的实现。那唯一有改变的是比较功能,它不同于数据类型的数据类型。qsort因此,期望用户将所述比较功能作为函数参数提供。

封装和抽象密切相关,因此你可以指出它们是真正不可分割的。出于实际目的,这可能是正确的。就是说,这里的封装不是抽象的东西:

class point {
    numeric x
    numeric y
}

我们封装了点的坐标,但是除了逻辑上将它们分组之外,我们没有实质性地将它们抽象掉。

这是一个非封装的抽象示例:

T pi<T> = 3.1415926535

这是一个具有给定值(π)的通用变量 pi,声明并不关心变量的确切类型。诚然,在实际代码中很难找到这样的东西:抽象实际上总是使用封装。但是,以上内容确实在C ++(14)中通过变量模板存在(=变量的通用模板);语法稍微复杂一些,例如:

template <typename T> constexpr T pi = T{3.1415926535};


 类似资料:
  • 问题内容: Java中的封装和抽象之间到底有什么区别?任何简短的例子也将不胜感激。 问题答案: 抽象和封装是两个很好的味道,它们在一起味道很好。 封装 可以最大程度地减少向代码用户展示的内容。该“用户”可以是您代码的其余部分,也可以是使用您发布的代码的任何人。 封装有一定的好处: 代码的用户不依赖于程序中可能更改的部分。当您更改程序时,他们不必更改代码 您可以更好地控制代码和状态在程序生命周期中的

  • 在采访中,我被要求解释抽象和封装之间的区别。我的回答是大致相同的 > 抽象允许我们以最简单的方式表示复杂的现实世界。它是识别一个对象应该具备的相关品质和行为的过程;换句话说,代表必要的特征而不代表背景细节。 封装是一个从外部真实世界隐藏对象所有内部细节的过程。“封装”这个词,就像“封装”成一个“胶囊”。它限制客户端查看实现抽象行为的内部视图。 我想通过以上的回答,面试官确信了这一点,但随后我被问到

  • 我今天有个面试。我有一个来自OOP的问题,关于封装之间的区别 我告诉她,封装基本上是绑定数据成员 在提出这个问题之前,我阅读了StackOverFlow上的其他线程,了解这两个OOPs概念之间的区别。但我发现自己无法说服面试官。 有人能举个最简单的例子来证明吗?

  • 我正在阅读OOP的一些基本内容。我对封装和抽象感到困惑。根据我的理解,抽象是一种只暴露很少的东西而隐藏很少的东西的方式。封装帮助我们封装对象的状态,以便外部世界无法访问它,并且可以通过内部方法访问它。因此,它们都是相关的。但是我读过很多次,封装是通过使用getter和setter实现的,而抽象是通过使用抽象类和接口实现的。现在考虑下面的代码(C) 在上面的代码中,我没有使用接口或抽象类,但根据我的

  • Truffle provides contract abstractions for interacting with your contracts. Skip ahead to the api section for a list of contract methods. 使用方法 To obtain a contract abstraction you can require it with

  • 我正在准备一次面试,并决定重温一下我的OOP概念。有数百篇文章可供使用,但似乎每一篇文章的描述都不一样。有人说 抽象是“识别具有系统变化的公共模式的过程;抽象代表了公共模式,并提供了一种指定使用哪种变化的方法”(Richard Gabriel)。 并通过抽象的类来实现。 另一些人说 抽象意味着只向对象的客户端显示必要的细节 而且 假设您的Employee类中有一个方法“CalculateSalar