溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

深入淺析C++/java 繼承類的多態

發布時間:2020-11-09 17:48:59 來源:億速云 閱讀:228 作者:Leah 欄目:編程語言

深入淺析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++全部都是父類的行為。

看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業資訊頻道,感謝您對億速云的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女