[問題]子類對象賦值給父類對象,父類對象能使用僅子類所有的成員?

看板C_Sharp作者 (賈富貴)時間15年前 (2011/02/02 07:10), 編輯推噓5(507)
留言12則, 3人參與, 最新討論串1/1
代碼如下: using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Ch09Ex01 { public class MyBase { public int a = 4; public virtual int fangfa() { return a; } } public class MyClass : MyBase { public int b = 100; public override int fangfa() { return a + b; } } class Program { static void Main(string[] args) { MyClass shiyan1 = new MyClass(); MyBase shiyan2 = shiyan1; Console.WriteLine(shiyan2.fangfa()); Console.ReadKey(); } } } 結果是顯示104,也就是說定義父類時所定義的虛擬方法在定義子類時被重寫,使該方法 使用到僅僅子類所有的成員。這樣當一個子類實例將自己賦給父類實例的時候,父類實 例的原虛擬方法將被替換,而且該方法將能使用子類的成員。 如上例所示,父類實例shiyan2根本沒有變量b,但他的方法fangfa()卻能調用變量b,是 不是這樣? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 221.5.86.3

02/02 09:32, , 1F
你說的正是OO裡面的多型(同名異式-Polymorphism)
02/02 09:32, 1F

02/02 11:06, , 2F
這跟多型是不一樣的意思吧...多型是相同的方法卻設計不同
02/02 11:06, 2F

02/02 11:09, , 3F
的傳入參數~原po也寫錯了~Main裡面寫的子類實例是當成父類
02/02 11:09, 3F

02/02 11:11, , 4F
用~而不是將自己賦給父類"實例"~就像是老爸和小孩各有"掃
02/02 11:11, 4F

02/02 11:12, , 5F
地"的方法~老媽(Main)叫的是老爸(MyBase)~但是動作的實體
02/02 11:12, 5F

02/02 11:15, , 6F
卻是小孩(MyClass)~所以當然是用小孩的方法掃地~邊掃邊留
02/02 11:15, 6F

02/02 11:15, , 7F
垃圾(b)...
02/02 11:15, 7F

02/02 12:30, , 8F
A大,多型有2種,1.靜態多型(即method overloading)
02/02 12:30, 8F

02/02 12:31, , 9F
2. Dynamic Binding 原作即是用動態繫結
02/02 12:31, 9F

02/02 13:00, , 10F
A大,原波是沒弄懂Value Type and Reference Type的差別
02/02 13:00, 10F

02/02 18:13, , 11F
Sorry~我還真不知道Dynamic Binding算多型~書看太少了Orz
02/02 18:13, 11F

02/08 11:40, , 12F
文章代碼(AID): #1DI9BILA (C_Sharp)