2012-05-16 79 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在現實中