深入淺析C++/java 繼承類的多態?很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。
C++/java 繼承類的多態詳解
學過C++和Java的人都知道,他們二者由于都可以進行面向對象編程,而面向對象編程的三大特性就是封裝、繼承、多態,所有今天我們就來簡單了解一下C++和Java在多態這方面的不同。
首先我們各看一個案例。
C++
//測試繼承與多態
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:
//子類定義一個和父類相同的屬性
char name[128];
char sex;
//子類重寫父類方法
void outPut() {
cout << "Dog" << endl;
}
void outPutDog() {
cout << "Son" << endl;
}
Dog() {
strcpy(name, "Dog");
sex = 'M';
}
};以上兩個類都很簡單,我們來看一下其測試代碼和結果。
/* 沒有多態的情況下測試結果和Java相同 Dog dog; cout << dog.name << endl; cout << dog.sex << endl; cout << dog.behavior << endl; dog.outPut(); dog.outPutAnimal(); dog.outPutDog(); //可通過如下方式訪問父類的行為 dog.Animal::outPut(); */ //多態的情況下: Animal *dog = new Dog; cout << dog->name << endl; cout << dog->behavior << endl; dog->outPut(); dog->outPutAnimal(); //測試結果 Animal Call Animal Father
可以看出所有的表現都是父類的行為,無論是相同的屬性還是重寫的方法。在這里需要說明一下,如果子類隱藏了父類的成員函數,則父類中所有同名的成員函數(重載的函數)均被隱藏。如果想要訪問父類中被隱藏的函數,需要通過父類名稱來訪問(dog.Animal::outPut();)。
在多態的情況下我們訪問的都是父類的行為,那怎樣才能訪問到子類的函數呢?答案是通過定義虛函數來實現,這個我們后面的博文講解。
現在我們在來看一下Java的表現。
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");
}
}子類也是定義了一個和父類相同的屬性,同時也重寫了父類的一個方法,我們看一下其測試方法和測試結果。
public static void main(String[] args) {
Animal dog = new Dog();
System.out.println(dog.name);
System.out.println(dog.behavior);
dog.outPut();
dog.outPutAnimal();
}
//測試結果
Animal//父類行為
Call
Dog//表現的是子類的行為
Father從這里可以看出,Java和C++還是有區別的,Java的屬性表現的是父類的行為,但是重寫的方法卻是子類的行為,而C++全部都是父類的行為。
看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業資訊頻道,感謝您對億速云的支持。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。