最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

什么是繼承

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

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

例子:

/**
 * 動(dòng)物
 */
public class Animal {
    public void breathing() {
        System.out.println("呼氣...吸氣...");
    }
}
/**
 * 飛行動(dòng)物
 * 繼承
 */
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)部實(shí)現(xiàn)細(xì)節(jié)對(duì)子類可見(jiàn),是‘白盒式’的代碼復(fù)用。

什么是組合

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

/**
 * 動(dòng)物
 */
public class Animal {
    public void breathing() {
        System.out.println("呼氣...吸氣...");
    }
}
/**
 * 爬行動(dòng)物
 * 組合
 */
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)的是整體和部分,強(qiáng)調(diào)的是has-a的關(guān)系。

所以組合更多的用于下面這樣的場(chǎng)景:

/**
 * 輪胎
 */
class Tire {
    public void run() {
        System.out.println("輪胎轉(zhuǎn)動(dòng)...");
    }
}
/**
 * 車燈
 */
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)部細(xì)節(jié)對(duì)子類可見(jiàn),其代碼屬于白盒式的復(fù)用,而組合中,對(duì)象之間的內(nèi)部細(xì)節(jié)不可見(jiàn),其代碼屬于黑盒式復(fù)用。

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

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

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

繼承的優(yōu)缺點(diǎn)

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

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

組合的優(yōu)缺點(diǎn)

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

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

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

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

相關(guān)文章

  • java同步之volatile解析

    java同步之volatile解析

    volatile可以說(shuō)是Java虛擬機(jī)提供的最輕量級(jí)的同步機(jī)制了,了解volatile的語(yǔ)義對(duì)理解多線程的特性具有很重要的意義,下面小編帶大家一起學(xué)習(xí)一下
    2019-05-05
  • 解決mac最新版intellij idea崩潰閃退crash的問(wèn)題

    解決mac最新版intellij idea崩潰閃退crash的問(wèn)題

    這篇文章主要介紹了解決mac最新版intellij idea崩潰閃退crash的問(wèn)題,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-09-09
  • lombok @Accessors用法詳解

    lombok @Accessors用法詳解

    這篇文章主要介紹了lombok @Accessors用法詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • Java字符串處理全解析(String、StringBuilder與StringBuffer)

    Java字符串處理全解析(String、StringBuilder與StringBuffer)

    這篇文章主要介紹了Java字符串處理全解析(String、StringBuilder與StringBuffer),本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),感興趣的朋友一起看看吧
    2025-04-04
  • 詳解Java中Stream流的用法和原理

    詳解Java中Stream流的用法和原理

    最近編碼的時(shí)候用到了Stream這個(gè)東西,以前也用過(guò),但是對(duì)它沒(méi)有一個(gè)系統(tǒng)的認(rèn)知,在好奇心的驅(qū)動(dòng)下還是決定花一些時(shí)間去系統(tǒng)地學(xué)一學(xué),不了解Stream的同學(xué)可以看看本文,對(duì)大家的學(xué)習(xí)和工作有一定的幫助
    2023-10-10
  • 詳解Java爬蟲(chóng)利器Jsoup

    詳解Java爬蟲(chóng)利器Jsoup

    Jsoup是一款Java語(yǔ)言開(kāi)發(fā)的HTML解析器,用于解析HTML文檔以及對(duì)HTML文檔進(jìn)行操作,處理等,本文就將詳細(xì)給大家介紹一下Java中的爬蟲(chóng)利器Jsoup,感興趣的同學(xué)可以參考一下
    2023-06-06
  • 詳解Java中字符流與字節(jié)流的區(qū)別

    詳解Java中字符流與字節(jié)流的區(qū)別

    這篇文章主要介紹了詳解Java中字符流與字節(jié)流的區(qū)別的相關(guān)資料,需要的朋友可以參考下
    2017-03-03
  • springboot docker原理及項(xiàng)目構(gòu)建

    springboot docker原理及項(xiàng)目構(gòu)建

    這篇文章主要介紹了springboot docker原理及項(xiàng)目構(gòu)建,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-11-11
  • 使用EasyPoi實(shí)現(xiàn)word文檔生成和段落循環(huán)

    使用EasyPoi實(shí)現(xiàn)word文檔生成和段落循環(huán)

    EasyPoi是一個(gè)Java的Excel和Word處理庫(kù),主要用于將Java對(duì)象轉(zhuǎn)換為Excel或Word文檔,本文主要介紹了如何使用EasyPoi實(shí)現(xiàn)word文檔生成和段落循環(huán),有需要的可以了解下
    2025-04-04
  • SpringBoot從配置文件中獲取屬性的四種方法總結(jié)

    SpringBoot從配置文件中獲取屬性的四種方法總結(jié)

    這篇文章主要介紹了SpringBoot從配置文件中獲取屬性的四種方法總結(jié),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-02-02

最新評(píng)論

崇左市| 耒阳市| 刚察县| 方正县| 奎屯市| 漳州市| 上高县| 海安县| 六安市| 任丘市| 庆城县| 仙桃市| 武胜县| 弋阳县| 南京市| 马龙县| 高密市| 翼城县| 阆中市| 从江县| 吕梁市| 静宁县| 宁海县| 平武县| 兴山县| 霞浦县| 屏山县| 河津市| 都昌县| 兴安县| 胶南市| 普格县| 海晏县| 和林格尔县| 乌兰浩特市| 海丰县| 康保县| 双江| 邵阳市| 贞丰县| 科尔|