一般来说,抽象就是把复杂的东西隐藏在一个特定的过程后面,使过程看起来很简单。
示例:Monitor ON/OFF::--用户不需要知道太多关于Monitor打开或关闭时发生的所有芯片的功能..他只需要知道On Function ON-Monitor 开启并开启功能 OFF-Monitor 关闭...
或者更好地寻找一辆车——每个人都知道有一个特殊的齿轮机器可以改变齿轮,没有人会费心知道齿轮改变的所有功能。所以,这就是抽象(避免不必要的实现以防止复杂性)。
因此,如果开发人员提供了良好的抽象,用户就不会想窥探对象的内部机制。
抽象是通过使具有一个或多个方法抽象的类抽象来实现的。这只不过是扩展它的类应该实现的基本特征。
e.g. 当你发明/设计一辆车时,你定义了一个特征,比如汽车应该有 4 个门、刹车、方向盘等……所以任何使用这个设计的人都应该包括这个特征。实现不是每个抽象的头。它只会定义应该包含的特征。
封装是限制用户遵循特定程序来访问特定进程的访问控制。它只是提供安全性并确保系统健壮性。
示例:我们可以将公司中的 HR 视为按照 Encapsulation.i.e. 原则工作的人,我们不能直接与其他部门交谈,我们需要通过 HR 进行沟通。这样可以确保公司的安全性和更好的维护记录。
我们可以一起举一个UNDER CONSTRUCTION BUILDING..的例子,我们可以说“不”之类的东西。管理人员所需的材料类型、工人数量等在每个建筑施工中都需要抽象。
但是,与此同时,将每个此类字段包含在充当工人和建筑投资者之间调解人的承包商中可以被视为封装。
因为,它将上述所有属性隐藏在一个实体中。
因此,如果您到现在还能够理解,您可以这样说
抽象只是封装的一个子集。即每个实体
执行抽象是在内部封装的,但每一件事
说明封装不一定总是抽象的。
例如.ToString() 几乎每个类中定义的方法都是Abstraction 的实现,因为我们没有内部的功能,我们只关心它将几乎所有内容都更改为字符串。并且当它作为一个单元组装时,它也被封装了..但是,我们通过Properties隐藏和访问的私有成员只是封装的一个例子,因为它基本上是在考虑数据安全的情况下完成的......!!
希望这能回答你的问题..!!