C++/java 繼承類的多態(tài)詳解及實(shí)例代碼
C++/java 繼承類的多態(tài)詳解
學(xué)過C++和Java的人都知道,他們二者由于都可以進(jìn)行面向?qū)ο缶幊?,而面向?qū)ο缶幊痰娜筇匦跃褪欠庋b、繼承、多態(tà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:
//子類定義一個(gè)和父類相同的屬性
char name[128];
char sex;
//子類重寫父類方法
void outPut() {
cout << "Dog" << endl;
}
void outPutDog() {
cout << "Son" << endl;
}
Dog() {
strcpy(name, "Dog");
sex = 'M';
}
};
以上兩個(gè)類都很簡(jiǎn)單,我們來看一下其測(cè)試代碼和結(jié)果。
/* 沒有多態(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(); //可通過如下方式訪問父類的行為 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)都是父類的行為,無論是相同的屬性還是重寫的方法。在這里需要說明一下,如果子類隱藏了父類的成員函數(shù),則父類中所有同名的成員函數(shù)(重載的函數(shù))均被隱藏。如果想要訪問父類中被隱藏的函數(shù),需要通過父類名稱來訪問(dog.Animal::outPut();)。
在多態(tài)的情況下我們?cè)L問的都是父類的行為,那怎樣才能訪問到子類的函數(shù)呢?答案是通過定義虛函數(shù)來實(shí)現(xiàn),這個(gè)我們后面的博文講解。
現(xiàn)在我們?cè)趤砜匆幌翵ava的表現(xiàn)。
Java
//父類
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");
}
}
//子類
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");
}
}
子類也是定義了一個(gè)和父類相同的屬性,同時(shí)也重寫了父類的一個(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//父類行為
Call
Dog//表現(xiàn)的是子類的行為
Father
從這里可以看出,Java和C++還是有區(qū)別的,Java的屬性表現(xiàn)的是父類的行為,但是重寫的方法卻是子類的行為,而C++全部都是父類的行為。
感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!
相關(guān)文章
Java API如何實(shí)現(xiàn)向Hive批量導(dǎo)入數(shù)據(jù)
這篇文章主要介紹了Java API如何實(shí)現(xiàn)向Hive批量導(dǎo)入數(shù)據(jù)的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-07-07
Java多線程并發(fā)開發(fā)之DelayQueue使用示例
這篇文章主要為大家詳細(xì)介紹了Java多線程并發(fā)開發(fā)之DelayQueue使用示例,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-09-09
SpringBoot中@Transiactional注解沒有效果的解決
這篇文章主要介紹了SpringBoot中@Transiactional注解沒有效果的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-08-08
Java集合操作之List接口及其實(shí)現(xiàn)方法詳解
這篇文章主要介紹了Java集合操作之List接口及其實(shí)現(xiàn)方法,詳細(xì)分析了Java集合操作中List接口原理、功能、用法及操作注意事項(xiàng),需要的朋友可以參考下2015-07-07

