關於類,介面,多型,工廠方法的例項

2021-05-23 09:07:47 字數 2330 閱讀 5282

實現結果:使用者可以輸入幾何形狀(circle,********,square)和形狀在小(邊的長度sidelength),程式自動得出關於該幾何形的相關資訊(是什麼形,面積,周長,角度和)

首先想到為3個形狀做3個類,每個類裡都有describe()這個方法,用來輸出此形狀的相關資訊。然後再弄乙個類,用來判定是使用者輸入的是哪個形狀,建立幾何形的例項物件。

用介面去實現。把共同都要執行的方法(儘管執行的內容不同),寫在乙個介面裡。這樣就可以利用「多型」來實」完全相同的方法呼叫會導致執行不同的**,這取決於要呼叫了其方法的物件的類。」

1.建立乙個ishape類

(定義了兩個共同的方法:獲取面積,描述資訊)

package}

我們還要知道每個形狀的周邊長度。但是,圓的周邊長度叫做周長,它的計算方式是獨有的,所以其行為異於三角形或正方形的行為。不過,三角形、正方形和其它多邊形之間仍然有很多類似之處,所以為它們定義乙個新介面類 ipolygon 還是很有意義的。先搞定circle類

2.建立乙個circle介面類

(這個類實現了介面,這樣,就一定要寫介面中定義的方法)

package

public function getarea():number

public function getcircumference():number

public function describe():string}}

這個時候如果 var circle

:ishape

= new circle(10); trace(circle.describe())就會輸出資訊了。以前沒有用介面是var circle

:circle

= new circle(10).這裡介面也是一種資料型別。下面就知道這拿介面來做為資料型別

(多型)

的好處了

3.建立乙個iregularpolygon介面類

(ishape介面已經抽出形狀最基本的方法了,還需把不屬於圓形而屬於三角形、正方形的方法出來定義介面, )

package}

4.建立乙個regularpolygon類

(這個是基本多邊形的父親,實現iregularpolygon介面 (共同的方法)就行了);

public class regularpolygon implements iregularpolygon

public function getarea():number

public function getperimeter():int

public function getsumofangles():int

else }

public function describe():string}}

5.建立********o類繼承

regularpolygon

(因為regularpolygon實現了介面,所以********也實現了介面)

package

public override function getarea():number

public

override

function describe():string}}

6.建立 square 類繼承regularpolygon。

package

public override function getarea():number

public override function describe():string}}

可以發現********和square的getarea,describe方法都不同,所以都要重寫。

7.建立工廠方法(

指的是乙個函式,該函式返回乙個物件,其基本資料型別或內容可能會因上下文而不同。)

package

return null; }

public static function describeshape(shapetype:string,shapesize:int)}}

總結:1.介面裡放的就是共同的方法名,沒有實質內容,實質內容如果是一樣的。可以弄乙個父親, 寫這個一樣的實質內容(就像上面的getperimeter,getsumofangles)。這樣,當兒子被建立例項化時,即使兒子那裡沒有寫,但仍然 可以訪問,因為繼承了。如果實質內容不同,每個兒子實現那個介面,各寫各的。(就像上面的getarea,describe); 2.介面裡抽出的方法,在實現時都要重寫一次,儘管沒有用到(可能子類會用到,就像regularpolygon裡的getarea())。  3.繼承時,建構函式裡的內容無法繼承,所以要用 super重寫一次,(就像上面的super(sidelength,3);引數個數要一樣)。4. 訪問父類的方法屬性:super.describe();

靜態工廠方法和例項工廠方法

在學習spring bean的例項化方式的時候遇到的乙個問題,spring bean例項化有3種方法 1 構造器生成 2 靜態工廠方法 3 例項工廠方法 那麼問題來了,什麼是靜態工廠方法,什麼是例項工廠方法?靜態工廠方法 顧名思義就是直接可以通過靜態方法來例項化乙個物件 如 public class...

類工廠方法

什麼是類工廠方法 用於快速建立物件的類方法,稱之為類工廠方法 用於給物件分配和初始化這塊儲存空間 類工廠方法是蘋果的乙個規範 1.一定是類方法 2.方法名稱以類的名稱開頭,首字母小寫 3.一定有返回值,返回值是id instancetype instancetype person instancet...

使用靜態工廠方法和例項工廠方法建立Bean

靜態工廠 工廠初始化之前,工廠中的類已經被例項化放在工廠容器中 例項工廠 工廠再構造方法初始化時,會將類進行例項化放在工廠中 factory method 指向靜態方法的名字 constructor arg 如果工廠方法需要傳入引數,則使用constructor arg來配置引數 1 使用靜態工廠方...