Java面向對象基礎知識之封裝,繼承,多態和抽象

一、封裝

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

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 屬性使用的數據類型時,也可以在不影響客戶端代碼的情況下進行。

二、繼承

繼承:是面向對象最顯著的一個特性,繼承是從已有的類中派生出新的類稱為子類,子類繼承父類的數據屬性和行為,並能根據自己的需求擴展出新的行為,提高瞭代碼的復用性。

Animal animal = new Cat();

繼承應該遵循裡氏替換原則,子類對象必須能夠替換掉所有父類對象。

三、多態

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

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

//父類
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();
    }

四、抽象

抽象是從眾多的事物中抽取出共同的、本質性的特征,而舍棄其非本質的特征。

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

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

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

因此抽取事物的共同特征就是抽取事物的本質特征,舍棄不同特征。

所以抽象的過程也是一個裁剪的過程,不同的、非本質性的特征全部裁剪掉瞭。

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

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

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

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

抽象的,才是穩定的,才是永恒的。 抽象的反義詞是具體。人員往往會說:“你講的太抽象瞭,能不能講的具體一點?”

在開發語言中,有抽象類,有具體類,具體類可以繼承自抽象類,可以實例化。抽象類可以派生出眾多的不同的具體類。

所謂:“一生二,二生三,三生萬物”。系統的穩定體現在抽象類,系統的變化體現在具體類。抽象類的層次要高於具體類。

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

抽象用 abstract 關鍵字來修飾,用 abstract 修飾類時,此類就不能被實例化,從這裡可以看出,抽象類就是為瞭繼承而存在的,

如果定義瞭一個抽象類而不去繼承它,那麼等於白白創建瞭這個抽象類,因為你不能用它來做任何事情,用 abstract 修飾方法時,此方法就是抽象方法,抽象方法必須存在於抽象類中,抽象方法沒有方法體,

對於一個父類來說,如果它的某個方法在父類中實現出來沒有任何意義,必須根據子類的實際需求來進行不同的實現,那麼就可以將這個方法聲明為抽象方法,抽象方法的修飾符必須為 public 或者 protected ,因為用 private,則不能被子類繼承,子類便無法實現該方法,缺省情況下默認為 public 。

總結

本篇文章就到這裡瞭,希望能夠給你帶來幫助,也希望您能夠多多關註WalkonNet的更多內容!

推薦閱讀: