新手學習Java筆記(五)多態、抽象、繼承、封裝的簡單例子

新手學習Java筆記(五)

public class Test {
    public static void main(String[] args) {
        Printer a = new ColorPrinter();
        Printer b = new MonochromePrinter();
        typeChoose(a);
        typeChoose(b);

    }
    private static void typeChoose(Printer a){
        a.typePrint();

        if(a instanceof ColorPrinter) {
            ColorPrinter z = (ColorPrinter)a;
            z.inkAdd();
        }else{
            MonochromePrinter z = (MonochromePrinter)a;
            z.inkAdd();
        }
    }
}

abstract class Printer{
    abstract void typePrint();
}

class ColorPrinter extends Printer{
    protected void typePrint(){
        System.out.println("\\033[Hello World!m");
    }
    void inkAdd(){
        System.out.println("Colorful ink added");
    }
}

class MonochromePrinter extends Printer{
    protected  void typePrint(){
        System.out.println("Hello World!");
    }
    void inkAdd(){
        System.out.println("Black ink added");
    }
}

多態

	Printer a = new ColorPrinter();
    Printer b = new MonochromePrinter();

	private static void typeChoose(Printer a){
        a.typePrint();

        if(a instanceof ColorPrinter) {
            ColorPrinter c = (ColorPrinter)a;
            c.inkAdd();
        }else{
            MonochromePrinter c = (MonochromePrinter)a;
            c.inkAdd();
        }

新建父類變量並將其賦爲子類(子類是父類的特例情況)
通過obj instanceof Class運算符判斷其類型
創建非抽象類對象,執行子類方法
父類對象調用了抽象方法

“封裝是指將一個計算機系統中的數據以及與這個數據相關的一切操作語言(即描述每一個對象的屬性以及其行爲的程序代碼)組裝到一起,一併封裝在一個有機的實體中,把它們封裝在一個“模塊”中,也就是一個類中,爲軟件結構的相關部件所具有的模塊性提供良好的基礎。在面向對象技術的相關原理以及程序語言中,封裝的最基本單位是對象,而使得軟件結構的相關部件的實現“高內聚、低耦合”的“最佳狀態”便是面向對象技術的封裝性所需要實現的最基本的目標。對於用戶來說,對象是如何對各種行爲進行操作、運行、實現等細節是不需要刨根問底瞭解清楚的,用戶只需要通過封裝外的通道對計算機進行相關方面的操作即可。大大地簡化了操作的步驟,使用戶使用起計算機來更加高效、更加得心應手。”——百度百科

抽象、繼承

abstract class Printer{
    abstract void typePrint();
}

class ColorPrinter extends Printer{
    protected void typePrint(){
        System.out.println("\\033[Hello World!m");
    }
    void inkAdd(){
        System.out.println("Colorful ink added");
    }
}

class MonochromePrinter extends Printer{
    protected  void typePrint(){
        System.out.println("Hello World!");
    }
    void inkAdd(){
        System.out.println("Black ink added");
    }
}

父類爲抽象類,包含抽象方法,抽象方法無方法體。子類繼承父類。父類調用抽象方法時會依據具體傳入對象而選擇執行對應類的同名方法。若無抽象方法,調用無法實現。

·“繼承性是面向對象技術中的另外一個重要特點,其主要指的是兩種或者兩種以上的類之間的聯繫與區別。繼承,顧名思義,是後者延續前者的某些方面的特點,而在面向對象技術則是指一個對象針對於另一個對象的某些獨有的特點、能力進行復制或者延續。如果按照繼承源進行劃分,則可以分爲單繼承(一個對象僅僅從另外一個對象中繼承其相應的特點)與多繼承(一個對象可以同時從另外兩個或者兩個以上的對象中繼承所需要的特點與能力,並且不會發生衝突等現象);如果從繼承中包含的內容進行劃分,則繼承可以分爲四類,分別爲取代繼承(一個對象在繼承另一個對象的能力與特點之後將父對象進行取代)、包含繼承(一個對象在將另一個對象的能力與特點進行完全的繼承之後,又繼承了其他對象所包含的相應內容,結果導致這個對象所具有的能力與特點大於等於父對象,實現了對於父對象的包含)、受限繼承、特化繼承。”
——百度百科

·“從宏觀的角度來講,多態性是指在面向對象技術中,當不同的多個對象同時接收到同一個完全相同的消息之後,所表現出來的動作是各不相同的,具有多種形態;從微觀的角度來講,多態性是指在一組對象的一個類中,面向對象技術可以使用相同的調用方式來對相同的函數名進行調用,即便這若干個具有相同函數名的函數所表示的函數是不同的。”
——百度百科

封裝

private static void typeChoose(Printer a){}
//只在public class內部調用
protected void typePrint(){}
//同一包調用
void inkAdd(){}
//繼承類調用

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章