Re: [問題] 還是不太懂多型
恕刪
小弟也是初學
提供一些淺見,要是有誤還煩請板友指正
: 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
10/29 09:31, 1F
討論串 (同標題文章)