2012-05-16 81 views
0

可能重复:
difference between abstraction and encapsulation?
What is the difference between abstraction and encapsulation?封装/抽象

我注意到,在讨论面向对象的设计时,封装和抽象的概念是很重要的。但是,我不太确定他们彼此有什么不同。我读过一些文章和帖子(其中大多数来自本网站),这些文章和帖子仅相互矛盾。

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

封装是隐藏类内部实现数据的过程。诸如Access修饰符和访问器方法之类的语言功能是关键。

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

如果可能的话,你还可以提供一个简单的例子,这将清楚地区分这两个原则?

干杯。

+3

请参阅[Lesson:Interfaces and inheritance](http://docs.oracle.com/javase/tutorial/java/IandI/index.html)。 – user1329572

回答

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理解,这个类没有按” t exit在现实中