抽象和多態性(二)
我們創建的第一個類是Shape。這是一個抽象類,因為我們不想創建這個類的實例,我們要創建的是它的派生類的實例。我們從所有的形狀(圓、長方形、正方形)提取出共同特征到Shape類。Shape類有一個實例變量color,它的變量聲明中帶有protected修飾符。protected修飾符表示這個變量只能在類的內部或者該類的派生類中訪問。緊接這個變量聲明的就是Shape類的構造函數和存取方法getColor(),這兩個方法都沒有什麼新的東西。最後一個方法getArea()加上了abstract修飾符,這是因為每一種不同的形狀都有不同的面積計算方法,因此這個方法必須由各種形狀自己來定義。
接下來的三個類Circle、Rectangle和Square都從Shape類派生,它們都具有Shape所描述的特征。這可以從它們的定義中看出來,它們的聲明中都帶有“public class:Shape {”,這個“: Shape”就表示當前的類從Shape類派生。由於這三個類都從Shape派生,它們自動擁有Shape中定義的所有public或者protected實例變量,即Circle、 Rectangle和Square包含了實例變量color。
每一個Sharp的派生類都有自己的構造函數,負責調用父類Shape的構造函數設置公共的實例變量(color)以及設置自己特有的實例變量。例如“public Circle(string color, double radius) : base(color)”這個語句中,“: base(color)”就表示用參數color調用父類的構造函數。
最後我們來看一下getArea()方法,它是一個多態性的示范。所有形狀都有getArea()方法,但是根據對象是圓、長方形還是正方形,具體調用的方法也不同。
要運行這個例子,先把所有文件保存到同一目錄,然後執行下面的命令:
csc /target:library /out:Shapes.dll
Shapes.cs Circle.cs Rectangle.cs Square.cs
然後執行:
csc /reference:Shapes.dll Example3.cs
現在,如果我們運行Example3.exe,將得到如下輸出:
圓的顏色是orange它的面積是28.274333882308138.
正方形的顏色是green它的面積是16.
長方形的顏色是red 它的面積是32.
參考:
C# 語言參考
C# Station