Re: [J2SE] 多型與轉型

看板java作者 (漢生博依)時間16年前 (2009/07/16 12:17), 編輯推噓1(101)
留言2則, 2人參與, 最新討論串7/7 (看更多)
※ 引述《kun25086 (我是宅宅)》之銘言: : ※ 引述《forris (喬巴)》之銘言: : : class Father{ : : String name = "Father"; : : String getName(){ : : return name; : : } : : String greeting(){ : : return "class Father"; : : } : : } : : class Son extends Father{ : : String name = "Son"; : : String greeting(){ : : return "class Son"; : : } : public static void main ( String[] args ) { : Father father = new Son(); : System.out.print( father.greeting() ); : System.out.print( father.name ); : System.out.print( father.getName() ); : } : : } : 想請問在main裡的程式, : 輸出的結果是 class Son , Father , Father : 爬文後小弟對於輸出的結果有些不了解,想請問各位小弟的觀念哪裡有問題? : Father father = new Son() ; <== 一個叫作father的東西,長得像Father, : 但實體是Son。 : 所以第一個print ( father.greeting() ) ; 會去找Son裡面的greeting(), : (因為實體是son嘛),也因此印出來的東西是 class Son。 : 第三個print ( father.getName() ); 會去Son裡找getName(),但由於Son裡沒有, : 所以會去父類別裡找getName(),因此印出來是Father。 : 不過第二個,為什麼不是在Son裡面找name,而是去Father裡面找name呢? : 是因為屬性和方法是不一樣的做法嗎? 還是小弟我的觀念有問題? : 煩請各位高手幫我解答一下,感恩! Java對多型(Polymorphism)的實現方式為Overriding & Overloading overriding - 父類別與子類別多型態的表現方式 子類別中的method與父類別定義相同的名稱與參數(完全一樣) overloading - 一個類別的多型態表現方式 一個類別中定義多個相同的method,但卻有不同個數的參數或參數類型 也就是說 member成員是沒有被含括在內的 依照我對你的例子的解讀 應該是有個叫做father的東西 實體是Son 可是看他的時候要用Father的觀點來看待 第一次的print(father.greeting());是會找Son的greeting() 因為多型的關係會找的是被overiding 的method 第二次print是father.name 這不在多型的實現方式內 所以他會照著Father的觀點來找name的member 第三次的print是father.getName() 由於沒有overriding 所以只好找Father內的getName() 如果你有overriding 那印出的時候就會找Son內的getName() 這段的觀念我覺得猛虎書裡面的例子解釋的很清楚 如果不懂就去翻翻吧 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 123.204.111.162

07/16 18:34, , 1F
我也是看猛虎的說 書寫得很好明白
07/16 18:34, 1F

07/17 16:51, , 2F
這麼說我懂了,謝謝各位的解答!感恩!
07/17 16:51, 2F
文章代碼(AID): #1ANgdsgM (java)
討論串 (同標題文章)
文章代碼(AID): #1ANgdsgM (java)