封装和抽象之间的区别

2022-08-31 08:00:17

我今天接受了采访。我有一个来自OOP的问题,关于封装抽象之间的区别?

我回答说,封装基本上是将数据成员和成员函数绑定到一个名为Class的单元中。而抽象基本上是隐藏实现的复杂性,并为用户提供轻松访问。我以为她会接受我的答案。但她问,如果两者的目的都是为了隐藏信息,那么这两者之间的实际区别是什么?我无法给她任何答案。

在问这个问题之前,我在StackOverFlow上阅读了关于这两个OOP概念之间差异的其他帖子。但我没有发现自己有能力说服面试官。

任何人都可以用最简单的例子来证明它吗?


答案 1

封装隐藏了变量或某些可能在类中经常更改的实现,以防止外部人员直接访问它。他们必须通过 getter 和 setter 方法访问它。

抽象也用于隐藏某些东西,但是在更高程度(类,接口)中。使用抽象类(或接口)的客户并不关心它是什么,他们只需要知道它能做什么。


答案 2

这张图片很好地总结了两者之间的差异:

enter image description here

来源在这里