Advance Member
|
你的程式輸出是什麼?是否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的達到"元件重用"的方法之一.
__________________
現今世道,自爆文當故事書,站長的話做成語錄,幾百年前的文章嘛沒事就挖出來考古...
|