Re: [J2SE] 多型與轉型
※ 引述《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
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 7 之 7 篇):