java的繼承和組合


繼承和組合是java中非常常用的兩種創建新類型的方法,兩者都能提高代碼的復用率。

繼承主要是想讓子類繼承父類的基本特性;組合技術通常用於想在新類中使用現有類的功能,而非它的接口。兩者的分別是"IS A"和"HAS A"的關系

繼承:

class Shape {
    public void draw() {
        System.out.println("draw a shape");
    }

    public void erase() {
        System.out.println("erase");
    }
}

class Square extends Shape {
    @Override
    public void draw() {
        System.out.println("draw a Square");
    }

    public static void main(String[] args) {
        Square s = new Square();
        s.draw();
        s.erase();
    }
}

 

組合:

class Draw {
    public void draw() {
        System.out.println("draw");
    }
}

class Erase {
    public void erase() {
        System.out.println("erase");
    }
}

class Work {
    public void work() {
        new Draw().draw();
        new Erase().erase();
    }
    
    public static void main(String[] args) {
        new Work().work();
    }
}

 

一、相比於組合,繼承有以下優點:

1、在繼承中,子類自動繼承父類的非私有成員(default類型視是否同包而定),在需要時,可選擇直接使用或重寫。

2、在繼承中,創建子類對象時,無需創建父類對象,因為系統會自動完成;而在組合中,創建組合類的對象時,通常需要創建其所使用的所有類的對象。

二、組合的優點:

1、在組合中,組合類與調用類之間低耦合;而在繼承中子類與父類高耦合。

2、可動態組合。

總結:

雖然繼承是OOP的一大特性,但很多時候並不推薦使用,因為它常常容易使結構復雜化,容易出錯。因此,除非我們確信使用繼承會使程序效率最高,否則,不考慮使用它,

這也是六大設計原則之一的合成復用原則。

那我們該如何判斷是否應該使用繼承呢?在java編程思想中提供了一個簡單的判斷方法,就是在考慮“真的需要向上轉型嗎?”。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM