亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Java中繼承和組合的區(qū)別

 更新時間:2023年07月13日 10:08:49   作者:王雀躍  
這篇文章主要介紹了Java中繼承和組合的區(qū)別,  繼承是面向?qū)ο笕蠡咎卣髦?繼承,封裝,多態(tài)),繼承就是子類繼承父類的特征和行為,使得子類對象(實例)具有父類的實例域和方法,需要的朋友可以參考下

什么是繼承

繼承是面向?qū)ο笕蠡咎卣髦?繼承,封裝,多態(tài)),繼承就是子類繼承父類的特征和行為,使得子類對象(實例)具有父類的實例域和方法,或子類從父類繼承方法,使得子類具有父類相同的行為。

在java中通過關(guān)鍵字extends實現(xiàn)繼承,java中所有類默認都是java.lang.Object的子類。繼承強調(diào)的是is-a關(guān)系。

例子:

/**
 * 動物
 */
public class Animal {
    public void breathing() {
        System.out.println("呼氣...吸氣...");
    }
}
/**
 * 飛行動物
 * 繼承
 */
public class FlyingAnimals extends Animal{
    public void filying() {
        System.out.println("飛行...");
    }
    public static void main(String[] args) {
        FlyingAnimals flyingAnimals = new FlyingAnimals();
        flyingAnimals.breathing();
        flyingAnimals.filying();
    }
}

繼承是代碼復(fù)用的一種方式。在繼承中,父類的方法內(nèi)部實現(xiàn)細節(jié)對子類可見,是‘白盒式’的代碼復(fù)用。

什么是組合

組合是通過對現(xiàn)有對象進行拼裝即組合產(chǎn)生新的具有更復(fù)雜的功能。如:

/**
 * 動物
 */
public class Animal {
    public void breathing() {
        System.out.println("呼氣...吸氣...");
    }
}
/**
 * 爬行動物
 * 組合
 */
public class Reptilia {
    private Animal animal;
    public Reptilia(Animal animal) {
        this.animal = animal;
    }
    public void crawling() {
        System.out.println("爬行...");
    }
    public void breathing() {
        animal.breathing();
    }
    public static void main(String[] args) {
        Animal animal = new Animal();
        Reptilia reptilia = new Reptilia(animal);
        reptilia.breathing();;
        reptilia.crawling();
    }
}

組合體現(xiàn)的是整體和部分,強調(diào)的是has-a的關(guān)系。

所以組合更多的用于下面這樣的場景:

/**
 * 輪胎
 */
class Tire {
    public void run() {
        System.out.println("輪胎轉(zhuǎn)動...");
    }
}
/**
 * 車燈
 */
class Light {
    public void light() {
        System.out.println("燈亮...");
    }
}
/**
 * 交通工具
 * 組合
 */
public class Vehicle {
    private Tire tire;
    private Light light;
    public Vehicle(Tire tire,Light light) {
        this.tire = tire;
        this.light = light;
    }
    public void operation() {
        light.light();
        tire.run();
    }
    public static void main(String[] args) {
        Tire tire = new Tire();
        Light light = new Light();
        Vehicle vehicle = new Vehicle(tire,light);
        vehicle.operation();
    }
}

繼承與組合的區(qū)別與聯(lián)系

繼承與組合都是面向?qū)ο笾写a復(fù)用的方式。父類的內(nèi)部細節(jié)對子類可見,其代碼屬于白盒式的復(fù)用,而組合中,對象之間的內(nèi)部細節(jié)不可見,其代碼屬于黑盒式復(fù)用。

繼承在編碼過程中就要指定具體的父類,其關(guān)系在編譯期就確定,而組合的關(guān)系一般在運行時確定。

繼承強調(diào)的是is-a的關(guān)系,組合強調(diào)的是has-a的關(guān)系。

繼承與組合的優(yōu)缺點

繼承的優(yōu)缺點

優(yōu)點: 支持擴展,通過繼承父類實現(xiàn),但會使系統(tǒng)結(jié)構(gòu)較復(fù)雜易于修改被復(fù)用的代碼

缺點: 代碼白盒復(fù)用,父類實現(xiàn)細節(jié)暴露給子類,破壞了封裝性當父類實現(xiàn)代碼修改時,可能使得子類也得修改,增加維護難度子類缺乏獨立性,依賴于父類,耦合度較高不支持動態(tài)拓展,在編譯期就決定了父類

組合的優(yōu)缺點

優(yōu)點: 代碼黑盒復(fù)用,被包括的對象內(nèi)部實現(xiàn)細節(jié)對外不可見,封裝性好整體類與局部類間松耦合,相互獨立支持擴展每個類只專注于一項任務(wù)支持動態(tài)擴展,可在運行時根據(jù)具體對象選擇不同類型的組合對象(擴展性比繼承好)

缺點: 創(chuàng)建整體類對象時,需要創(chuàng)建所有局部類對象,導(dǎo)致系統(tǒng)對象很多 什么情況下使用繼承,什么情況下使用組合

從分析看,組合的優(yōu)點多于繼承,加上java中僅支持單繼承,所以:除非兩個類之間是is-a的關(guān)系,否則盡量用組合。

到此這篇關(guān)于Java中繼承和組合的區(qū)別的文章就介紹到這了,更多相關(guān)java的繼承和組合內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • SpringBoot事件發(fā)布和監(jiān)聽詳解

    SpringBoot事件發(fā)布和監(jiān)聽詳解

    今天去官網(wǎng)查看spring boot資料時,在特性中看見了系統(tǒng)的事件及監(jiān)聽章節(jié),所以下面這篇文章主要給大家介紹了關(guān)于SpringBoot事件發(fā)布和監(jiān)聽的相關(guān)資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2021-11-11
  • SpringBoot中YAML配置文件實例詳解

    SpringBoot中YAML配置文件實例詳解

    前面一直在使用properties配置文件,spring boot也支持yaml配置文件,下面這篇文章主要給大家介紹了關(guān)于SpringBoot中YAML配置文件的相關(guān)資料,需要的朋友可以參考下
    2023-04-04
  • Spring Batch遠程分區(qū)的本地Jar包模式的代碼詳解

    Spring Batch遠程分區(qū)的本地Jar包模式的代碼詳解

    這篇文章主要介紹了Spring Batch遠程分區(qū)的本地Jar包模式,本文通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-09-09
  • Spring MVC學(xué)習(xí)教程之視圖深入解析

    Spring MVC學(xué)習(xí)教程之視圖深入解析

    這篇文章主要給大家介紹了關(guān)于Spring MVC學(xué)習(xí)教程之視圖解析的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家學(xué)習(xí)或使用spring mvc具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起看看吧
    2018-11-11
  • SpringBoot手動開啟事務(wù):DataSourceTransactionManager問題

    SpringBoot手動開啟事務(wù):DataSourceTransactionManager問題

    這篇文章主要介紹了SpringBoot手動開啟事務(wù):DataSourceTransactionManager問題,具有很好的價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • java使用回溯法求解數(shù)獨示例

    java使用回溯法求解數(shù)獨示例

    這篇文章主要介紹了java使用回溯法求解數(shù)獨示例,大家參考使用吧
    2014-01-01
  • 如何將應(yīng)用的log4j替換成logback詳解

    如何將應(yīng)用的log4j替換成logback詳解

    無論從設(shè)計上還是實現(xiàn)上,Logback相對log4j而言有了相對多的改進。所以下面這篇文章主要給大家介紹了關(guān)于如何將應(yīng)用的log4j換成logback的相關(guān)資料,文中介紹的很詳細,需要的朋友可以參考下。
    2017-02-02
  • JavaEE Filter敏感詞過濾的方法實例詳解

    JavaEE Filter敏感詞過濾的方法實例詳解

    我們無論是在聊天還是在留言時,都有一些信息不希望別人看到。那么如果過濾這些關(guān)鍵詞呢?下面小編給大家分享JavaEE Filter敏感詞過濾的方法實例詳解,感興趣的朋友一起學(xué)習(xí)吧
    2016-05-05
  • java實現(xiàn)2048小游戲

    java實現(xiàn)2048小游戲

    這篇文章主要為大家詳細介紹了java實現(xiàn)2048小游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-02-02
  • 實戰(zhàn)分布式醫(yī)療掛號系統(tǒng)登錄接口整合阿里云短信詳情

    實戰(zhàn)分布式醫(yī)療掛號系統(tǒng)登錄接口整合阿里云短信詳情

    這篇文章主要為大家介紹了實戰(zhàn)分布式醫(yī)療掛號系統(tǒng)登錄接口整合阿里云短信詳情,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪<BR>
    2022-04-04

最新評論