C++/java 繼承類(lèi)的多態(tài)詳解及實(shí)例代碼
C++/java 繼承類(lèi)的多態(tài)詳解
學(xué)過(guò)C++和Java的人都知道,他們二者由于都可以進(jìn)行面向?qū)ο缶幊?,而面向?qū)ο缶幊痰娜筇匦跃褪欠庋b、繼承、多態(tài),所有今天我們就來(lái)簡(jiǎn)單了解一下C++和Java在多態(tài)這方面的不同。
首先我們各看一個(gè)案例。
C++
//測(cè)試?yán)^承與多態(tài) class Animal { public: char name[128]; char behavior[128]; void outPut() { cout << "Animal" << endl; } void outPutAnimal() { cout << "Father" << endl; } Animal() { strcpy(name, "Animal"); strcpy(behavior, "Call"); } }; class Dog: public Animal { public: //子類(lèi)定義一個(gè)和父類(lèi)相同的屬性 char name[128]; char sex; //子類(lèi)重寫(xiě)父類(lèi)方法 void outPut() { cout << "Dog" << endl; } void outPutDog() { cout << "Son" << endl; } Dog() { strcpy(name, "Dog"); sex = 'M'; } };
以上兩個(gè)類(lèi)都很簡(jiǎn)單,我們來(lái)看一下其測(cè)試代碼和結(jié)果。
/* 沒(méi)有多態(tài)的情況下測(cè)試結(jié)果和Java相同 Dog dog; cout << dog.name << endl; cout << dog.sex << endl; cout << dog.behavior << endl; dog.outPut(); dog.outPutAnimal(); dog.outPutDog(); //可通過(guò)如下方式訪問(wèn)父類(lèi)的行為 dog.Animal::outPut(); */ //多態(tài)的情況下: Animal *dog = new Dog; cout << dog->name << endl; cout << dog->behavior << endl; dog->outPut(); dog->outPutAnimal(); //測(cè)試結(jié)果 Animal Call Animal Father
可以看出所有的表現(xiàn)都是父類(lèi)的行為,無(wú)論是相同的屬性還是重寫(xiě)的方法。在這里需要說(shuō)明一下,如果子類(lèi)隱藏了父類(lèi)的成員函數(shù),則父類(lèi)中所有同名的成員函數(shù)(重載的函數(shù))均被隱藏。如果想要訪問(wèn)父類(lèi)中被隱藏的函數(shù),需要通過(guò)父類(lèi)名稱來(lái)訪問(wèn)(dog.Animal::outPut();)。
在多態(tài)的情況下我們?cè)L問(wèn)的都是父類(lèi)的行為,那怎樣才能訪問(wèn)到子類(lèi)的函數(shù)呢?答案是通過(guò)定義虛函數(shù)來(lái)實(shí)現(xiàn),這個(gè)我們后面的博文講解。
現(xiàn)在我們?cè)趤?lái)看一下Java的表現(xiàn)。
Java
//父類(lèi) public class Animal { public String name = "Animal"; public String behavior = "Call"; public void outPut() { System.out.println("Animal"); } public void outPutAnimal() { System.out.println("Father"); } } //子類(lèi) public class Dog extends Animal{ public String name = "Dog"; public char sex = 'M'; public void outPut() { System.out.println("Dog"); } public void outPutDog() { System.out.println("Son"); } }
子類(lèi)也是定義了一個(gè)和父類(lèi)相同的屬性,同時(shí)也重寫(xiě)了父類(lèi)的一個(gè)方法,我們看一下其測(cè)試方法和測(cè)試結(jié)果。
public static void main(String[] args) { Animal dog = new Dog(); System.out.println(dog.name); System.out.println(dog.behavior); dog.outPut(); dog.outPutAnimal(); } //測(cè)試結(jié)果 Animal//父類(lèi)行為 Call Dog//表現(xiàn)的是子類(lèi)的行為 Father
從這里可以看出,Java和C++還是有區(qū)別的,Java的屬性表現(xiàn)的是父類(lèi)的行為,但是重寫(xiě)的方法卻是子類(lèi)的行為,而C++全部都是父類(lèi)的行為。
感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!
- Java中繼承、多態(tài)、重載和重寫(xiě)介紹
- Java封裝、繼承、多態(tài)三大特征的理解
- java用接口、多態(tài)、繼承、類(lèi)計(jì)算三角形和矩形周長(zhǎng)及面積的方法
- Java面向?qū)ο缶幊蹋ǚ庋b/繼承/多態(tài))實(shí)例解析
- java中重載,繼承,重寫(xiě)和多態(tài)的區(qū)別
- Java 繼承與多態(tài)的深入理解
- 詳解java封裝繼承多態(tài)
- 詳解Java中的封裝、繼承、多態(tài)
- 淺談java 面對(duì)對(duì)象(抽象 繼承 接口 多態(tài))
- Java初學(xué)者入門(mén)之繼承和多態(tài)
相關(guān)文章
Java 自動(dòng)安裝校驗(yàn)TLS/SSL證書(shū)
這篇文章主要介紹了Java 自動(dòng)安裝校驗(yàn)TLS/SSL證書(shū)的示例,幫助大家更好的理解和使用Java,感興趣的朋友可以了解下2020-10-10Java?SE判斷兩個(gè)文件內(nèi)容是否相同的多種方法代碼
昨天因?yàn)橐獛蛶熜值拿λ钥戳艘幌氯绾闻袛鄡蓚€(gè)文件內(nèi)容是否相同,這里給大家總結(jié)下,這篇文章主要給大家介紹了關(guān)于Java?SE判斷兩個(gè)文件內(nèi)容是否相同的多種方法,需要的朋友可以參考下2023-11-11Java開(kāi)發(fā)神器Lombok安裝與使用詳解
Lombok的安裝分兩部分:Idea插件的安裝和maven中pom文件的導(dǎo)入,本文重點(diǎn)給大家介紹Java開(kāi)發(fā)神器Lombok安裝與使用詳解,感興趣的朋友跟隨小編一起看看吧2022-02-02Spring Boot + Jpa(Hibernate) 架構(gòu)基本配置詳解
本篇文章主要介紹了Spring Boot + Jpa(Hibernate) 架構(gòu)基本配置詳解,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-05-05SpringDataJpa的使用之一對(duì)一、一對(duì)多、多對(duì)多?關(guān)系映射問(wèn)題
這篇文章主要介紹了SpringDataJpa的使用?--?一對(duì)一、一對(duì)多、多對(duì)多關(guān)系映射,本文主要講述?@OneToOne、@OneToMany、@ManyToOne、@ManyToMany?這四個(gè)關(guān)系映射注解的使用,以及其對(duì)應(yīng)的級(jí)聯(lián)關(guān)系,需要的朋友可以參考下2022-07-07mybatis攔截器實(shí)現(xiàn)通用權(quán)限字段添加的方法
這篇文章主要給大家介紹了關(guān)于mybatis攔截器實(shí)現(xiàn)通用權(quán)限字段添加的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用mybatis具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-09-09