基礎知識--封裝、繼承、多態、抽象

1、封裝

封裝:是面向對象方法的重要原則,就是把對象的屬性和行爲(數據)結合爲一個獨立的總體,並儘量隱藏對象的內部實現細節,就是把不想告訴或者不應告訴別人的東西隱藏起來,把能夠告訴別人的公開,別人只能用我提供的功能實現需求,而不知道是如何實現的。增長安全性安全

public class Person {
    private String name;
    private int gender;
    private int age;

    public String getName() {
        return name;
    }

    public String getGender() {
        return gender == 0 ? "man" : "woman";
    }

    public void work() {
        if (18 <= age && age <= 50) {
            System.out.println(name + " is working very hard!");
        } else {
            System.out.println(name + " can't work any more!");
        }
    }
}

以上 Person 類封裝 name、gender、age 等屬性,外界只能經過 get() 方法獲取一個 Person 對象的 name 屬性和 gender 屬性,而沒法獲取 age 屬性,可是 age 屬性能夠供 work() 方法使用。架構

注意到 gender 屬性使用 int 數據類型進行存儲,封裝使得用戶注意不到這種實現細節。而且在須要修改 gender 屬性使用的數據類型時,也能夠在不影響客戶端代碼的狀況下進行。函數

2、繼承

繼承:是面向對象最顯著的一個特性,繼承是從已有的類中派生出新的類稱爲子類,子類繼承父類的數據屬性和行爲,並能根據本身的需求擴展出新的行爲,提升了代碼的複用性。spa

Animal animal = new Cat();

繼承應該遵循里氏替換原則,子類對象必須可以替換掉全部父類對象。設計

3、多態

多態:指容許不一樣的對象對同一消息作出相應。即同一消息能夠根據發送對象的不一樣而採用多種不一樣的行爲方式(發送消息就是函數調用)。封裝和繼承幾乎都是爲多態而準備的,在執行期間判斷引用對象的實際類型,根據其實際的類型調用其相應的方法。code

多態分爲編譯時多態和運行時多態。編譯時多態主要指方法的重載,運行時多態指程序中定義的對象引用所指向的具體類型在運行期間才肯定。對象

//父類
public class Base {
    protected void show() {}
}

//子類
class Kid: Base {
     public  void show() {
        System.out.println(" i am  kid");
    }
}
public static void main( String[] args )
    {
        Base base =  new Kid();
        base.show();
    }

4、抽象

抽象是從衆多的事物中抽取出共同的、本質性的特徵,而捨棄其非本質的特徵。blog

例如蘋果、香蕉、生梨、葡萄、桃子等,它們共同的特性就是水果。得出水果概念的過程,就是一個抽象的過程。繼承

要抽象,就必須進行比較,沒有比較就沒法找到共同的部分。接口

共同特徵是指那些能把一類事物與他類事物區分開來的特徵,這些具備區分做用的特徵又稱本質特徵。

所以抽取事物的共同特徵就是抽取事物的本質特徵,捨棄不一樣特徵。

因此抽象的過程也是一個裁剪的過程,不一樣的、非本質性的特徵所有裁剪掉了。

所謂的共同特徵,是相對的,是指從某一個刻面看是共同的。

好比,對於汽車和大米,從買賣的角度看都是商品,都有價格,這是他們的共同的特徵,而從其餘方面來比較是,他們則是不一樣的。

因此在抽象時,同與不一樣,決定於從什麼角度上來抽象。抽象的角度取決於分析問題的目的。

在軟件開發過程當中,識別穩定的需求、識別核心的需求、識別概念性的需求、設計系統的架構、定義系統中構件之間的接口關係等等都是抽象的過程,都是反應系統的本質特徵的過程。

抽象的,纔是穩定的,纔是永恆的。 抽象的反義詞是具體。人員每每會說:「你講的太抽象了,能不能講的具體一點?」

在開發語言中,有抽象類,有具體類,具體類能夠繼承自抽象類,能夠實例化。抽象類能夠派生出衆多的不一樣的具體類。

所謂:「一輩子二,二生三,三生萬物」。系統的穩定體如今抽象類,系統的變化體如今具體類。抽象類的層次要高於具體類。

系統因抽象而穩定,因抽象而生動。

抽象用 abstract 關鍵字來修飾,用 abstract 修飾類時,此類就不能被實例化,從這裏能夠看出,抽象類就是爲了繼承而存在的,

若是定義了一個抽象類而不去繼承它,那麼等於白白建立了這個抽象類,由於你不能用它來作任何事情,用 abstract 修飾方法時,此方法就是抽象方法,抽象方法必須存在於抽象類中,抽象方法沒有方法體,

對於一個父類來講,若是它的某個方法在父類中實現出來沒有任何意義,必須根據子類的實際需求來進行不一樣的實現,那麼就能夠將這個方法聲明爲抽象方法,抽象方法的修飾符必須爲 public 或者 protected ,由於用 private,則不能被子類繼承,子類便沒法實現該方法,缺省狀況下默認爲 public 。

相關文章
相關標籤/搜索