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

作者: aoksc (重出江湖)   2017-12-27 00:12:04
※ 引述《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物件就一定能傳給這個方法去使用
這個就是物件導向的三大特性之一多型
作者: wwe90425 (撒尿牛丸)   2016-01-04 08:00:00
感謝您的回覆!原來這就是多型!

Links booklink

Contact Us: admin [ a t ] ucptt.com