如果你不想使用繼承到的行為該怎麼辦?
改寫掉就好囉!
本課介紹如何讓繼承的 class 覆寫掉 base class 的 method
教學影片
注意:影片有高畫質 720P 的選項,可以看得更清楚喔!
重點提示
1. Override 指的是「改寫、覆寫」,主要是用來讓繼承的 class 改寫掉從 base class 繼承到的行為。
2. 想要使用 Override,首先必須要先在繼承的 class 中定義一個名稱與參數皆相同的method,然後在原本的 method 前加上「virtual」關鍵字,而新的 method 前加上「override」關鍵字。
補充
Override 使用時機
基本上在撰寫物件導向的程式時,為了要讓許多物件有相同的動作,通常會寫一個 class 包含該動作,並讓其他 class 繼承它。就像是這次課程中介紹的 move 或 attack。可是偏偏會有一些狀況會需要讓某些物件的行為與預設的不同,而當你需要這種修改時,就會用到 override。
另外,Override 也常用於多型性中,主要是因為它可以讓許多具有相同 method 的物件具有不同行為,這部分會在之後的課程中提及。
練習
有一間書店,最近在進行大清倉。除了百科全書類的書之外,只要是書類幾乎都賣 200 元 (百科全書類 500 元)。請你幫書店老闆撰寫一個計算書類價格的系統。
該系統必須符合下列條件:
1. 有一個叫做 Book (書) 的 class,其中包含一個 public property,和一個 public method。該 property 的名稱為 BookName (書名)。method 則為「ShowPrice (顯示價格)」,會傳會一個 string,內容是書名與價格。例如:「寫扣的藝術 200 元」。
2. 有另一個 class 叫做 Encyclopedia (百科全書),繼承自 Book。它包含一個 method,也叫做「ShowPrice (顯示價格)」。這個 method 必須 override Book 的 ShowPrice,並且顯示的價格要是 500 元。
寫好之後可以自行建立一個 Form,加上一個按鈕,在按鈕的行為中用下面這段程式碼測試。
Book a = new Book();
Book b = new Encyclopedia();
a.BookName = "寫扣的藝術";
b.BookName = "大英百科全書";
MessageBox.Show(a.showPrice());
MessageBox.Show(b.showPrice());
執行後應該出現兩個 MessageBox,分別顯示:「寫扣的藝術 200 元」與「大英百科全書 500 元」
相關資訊連結
MSDN - 官方對於 Override 的說明
https://msdn.microsoft.com/zh-tw/library/ebca9ah3.aspx
想請問小山有遇過使用f5會執行錯誤,但ctrl+f5卻可以執行的情況嗎?
回覆刪除終次又可以看到小山 大大的教學囉
回覆刪除小山老師, 謝謝你沒忘記我們~~~ v_v
回覆刪除小山老師,感謝你的大恩大德,請持續教教鄉民們吧!!
回覆刪除特別好
回覆刪除加油繼續教下去
我目前为止最喜欢的programming教学,请坚持下去哦!:)
回覆刪除太棒啦~~~淺顯易懂 跟某些書生硬的講法不一樣~
回覆刪除