Re: [問題] 還是不太懂多型

看板java作者 (血腹獸)時間15年前 (2008/10/28 08:02), 編輯推噓1(100)
留言1則, 1人參與, 最新討論串3/3 (看更多)
恕刪 小弟也是初學 提供一些淺見,要是有誤還煩請板友指正 : 1.多型就是有很一種類別有很多的類別型態,因為classA的function裡的參數 : ,不知道會傳什麼型態進來,所以就用多型,我這樣子講對嗎?這就是多型的 : 好處嗎? 對,以您的例子 假設有二個類別 Triangle 和 Rectangle 都是繼承他們的超類別 Shape Triangle 和 Rectangle 都可以視為是Shape 好處就在於 在撰碼的時侯可以針對上層的類別或介面寫程式(Shape),而不是 針對實作類別(Triangle, Rectangle)去寫程式 舉個例子 若今日Shape假設長這樣 abstract class Shape{ abstract public void paint(); public void rotate(){ .........; } } 要繼承Shape的類別就一定會有Shape的特性 class Triangle extends Shape{ public void paint(){ ....; } } 今日假設有個method要傳入參數並畫出來時只要就好了 無須去知道傳入的究竟是Triangle還是Rectangle class Test{ public void testPaintMethod(Shape s){ s.paint(); } } 這樣Test這個類別只與Shape去互動而非與下層的Triangle或Rectangle互動 : 2.我看書上說就是因為第一個問題:我們不知會有什麼類別傳入,所以我們用 : 多型,可是程式是自己打的,為什麼自己會不知道會有什麼類別傳入參數? : 因為我覺得自己會知道是什麼類別會傳入,所以主方法裡可能就改成 類別 : 三角型 形狀=new 類別三角型();或是類別正方型 形狀=new 類別正方型() : ;而不是用多型的方法去寫它。 雖然程式是自己打的,有的時侯我們使用多型的方法是為了增加程式的彈性與再利用率 以上述類別Test的例子來說,是用到多型的寫法 沒用到多型的寫法是 class Test{ public void testPaintTriangleMethod(Triangle t) { t.paint(); } public void testPaintRectangleMethod(Rectangle r) { r.paint(); } } 變得只要是多一個形狀,就必須新增一個方法 : 3.多型可以應用在那裡呢?什麼情況最適合用甚至是必定要用的呢? : 書上還寫說"多型是建立在繼承的基礎之上的,沒有繼承,就不會有多型",可 : 是我上面寫的例子,classB沒有extends classA,它們之間沒有繼承關係,但 : 是有多型的關係,我覺得書是不會寫錯,那我的觀念那裡錯了? : 問題有點多,麻煩高手指導一下我的觀念,非常謝謝了! 多型算是OO的基本觀念,應用還挺多的 只要類別有繼承或實作介面,而另一個方法是與超類別或介面互動 就算是多型的應用 如果有興趣可以看看Design Pattern,有不少多型的應用 class B extends A 意思是說 這個類別可以看成B也能看成A,有多種型態 所以叫多型 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 61.56.13.124

10/29 09:31, , 1F
我是原PO~非常謝謝你的講解
10/29 09:31, 1F
文章代碼(AID): #191bQ1dt (java)
文章代碼(AID): #191bQ1dt (java)