封装/抽象

时间:2012-05-16 16:21:36

标签: java oop

  

可能重复:
  difference between abstraction and encapsulation?
  What is the difference between abstraction and encapsulation?

我注意到在讨论OOP设计时,封装和抽象的概念很重要。但是,我不太确定他们彼此之间的差异。我读了很多文章和帖子(其中大部分来自这个网站)只是相互矛盾。

我的理解是抽象是分解现实世界物体复​​杂性的一种手段。这种分解可能涉及创建共同代表现实世界对象的若干对象。抽象也可以有很多层,类继承就是这种情况的一个例子。

封装是隐藏类中内部实现数据的过程。 Access修饰符和Accessor方法等语言功能是关键所在。

如果这些定义是正确的(如果我错了,请纠正我),接口用于什么原则?抽象?因为可以在界面中汇总一组真实世界的对象?或封装,其中接口本身可用于暴露对象的特征而不泄露内部功能。

如果可能,您还可以提供一个简短的例子,这将明确区分这两个原则吗?

干杯。

2 个答案:

答案 0 :(得分:0)

至少对我来说理解抽象的最好方法就是用这个例子来思考几何图形中的一个时刻。让我们说三角形,正方形,矩形和圆形,这个元素构成了这个“几何图形”的一部分,如果你想在类模型中表示它,你可以做这样的事情

public abstract class GeometricFigures
{

    public int perimeter(); //Common Behavior
}

现在这是一个抽象类,因为这个元素在我们的世界中没有真正的表示,而且没关系,因为GeometricFigures类不能被实例化。

你可以定义这个类的子节点,例如trigule,并且这个类继承自GeometricFigures这样的

public class Triangle inherits GeometricFigures
{
    public int size1;
    public int size2;
    public int size3;
    public int perimeter( int size1, int size2, int size3);
}

Abstraction的概念允许我代表父类GeometricFigures理解这个类不会在现实中退出

答案 1 :(得分:0)

接口属于抽象类别。它们“抽象”或将类的共同特征分解为另一个类,迫使所有子类遵守其合同并实现其所有方法。 在我看来,我认为抽象和接口是代码重用,这有利于更易维护的代码,而封装主要允许更大的安全措施。 它们都是主要的OOP概念,并且分享一些比较。