Re: [問題]參考變數的問題

看板C_Sharp作者 (重出江湖)時間6年前 (2017/12/27 00:12), 編輯推噓1(100)
留言1則, 1人參與, 7年前最新討論串2/2 (看更多)
※ 引述《wwe90425 (撒尿牛丸)》之銘言: : 假設: : class A{ : } : class B:A{ : public B{} : public MethodB_1{} : } : 假設有兩個類別A&B : B繼承自A : 請問: : A _a = new B() : 這樣宣告有什麼用途嗎? : 今天有做過實驗 : 宣告完後 : _a也無法用子類別的方法(但還是會執行B的建構子) 你就想像飛機就是A類別 戰鬥機、運輸機、客機都是繼承自飛機的B、C、D…類別 那麼當你只知道某個東西是飛機時(A _a = new B(); 就是你把B物件當成飛機看) 你怎麼會知道他其實是可以發射飛彈的? 這個東西其實就是戰鬥機 只是你是用飛機的觀點(A類別)去看他 所以你只知道他會飛 因為他是飛機所以他必定有飛機的功能 (因為他繼承自A類別所以他必定有A類別的method) 但不知道他會發射飛彈這很正常吧(所以你不能用子類別的方法,除非強制轉型回戰鬥機) : 那幹嘛不直接宣告 A _a = new A 你可能遇到一種情況是遇到B、C、D、E…類別都繼承自A的情況 那麼如果我給你一個裝有B、C、D、E物件的List或Array 我要這些物件都執行一個繼承自A的method 請問我要怎麼用最簡單的方式去執行這個繼承自A的method呢? 那當然就是你說的A _a = new B(); 我可以寫個foreach把每個object取出來assign給A _a 我根本不需要管A _a = 的右邊是什麼 因為只要型別正確 他一定有A類別公開的method 那麼我就可以從A類別的觀點去操作這個這些物件 或者是可以設計某個method的參數就是A類別的型別 那麼繼承自A類別的B、C、D、E物件就一定能傳給這個方法去使用 這個就是物件導向的三大特性之一多型 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 118.233.159.254 ※ 文章網址: https://www.ptt.cc/bbs/C_Sharp/M.1514304726.A.0EF.html

01/04 08:00, 7年前 , 1F
感謝您的回覆!原來這就是多型!
01/04 08:00, 1F
文章代碼(AID): #1QGdJM3l (C_Sharp)
討論串 (同標題文章)
文章代碼(AID): #1QGdJM3l (C_Sharp)