瀏覽單個文章
harrisonlin
Advance Member
 
harrisonlin的大頭照
 

加入日期: Jun 2003
您的住址: Taipei
文章: 442
你的程式輸出是什麼?是否2行都是"Benz"?我不確定C#的method定義裡的"virtual","new"和"override"的意義,所以不確定.

就你的問題回答:

"CarClass Base = (CarClass)Benz;
Base 是CarClass 的實作物件嗎? 或是只是由Benz物件轉型而來?
這樣寫法是有什麼含義嗎?"

BenzClass繼承自CarClass,所以BenzClass的instance就是CarClass的instance.轉型只是我們想把Base這個物件當成CarClass的instance來操作.

這個例子裡只有一個super class和一個sub class,如果你多增加幾個sub class(BmwClass, AudiClass等等),然後生一個CarClass的容器(List, Set,或Array),任意丟一些上述sub class的instance進去,然後一個一個呼叫它們的run()或是getName()...

你有沒有發現到,你不需要知道這些容器裡的instance實際上是什麼型別(是Benz或BMW或Audi...),但它們都會"run",你呼叫它們的"getName()"都會回傳自己的名字.這就是一種"多型"的手法,你使用super class的界面(CarClass)操作sub class的實例,而不需要去cast它們,就可以得到sub class自己定義的行為.你可以運用這種手法,在程式中只使用super class,這樣往後你塞什麼sub class的instance,你的程式都不需要再大改了,這就是OOP的達到"元件重用"的方法之一.
__________________
現今世道,自爆文當故事書,站長的話做成語錄,幾百年前的文章嘛沒事就挖出來考古...
舊 2015-03-05, 01:39 PM #5
回應時引用此文章
harrisonlin離線中