Code demonstration for multiple types and dynamic links

 多型與動態連結的程式碼示範

許多物件導向程式語言都有所謂動態連結(dynamic binding)和多型(polymorphism)

的性質,請先解釋該性質是甚麼。再請利用下列 Java 的例子說明動態連結(dynamic binding)和多型(polymorphism)的觀念,其中 ShapeObject 為 Circle 和 Rectangle的 superclass。(20 分)


public class ShapeStore {

public static void main(String[] args) {

showShape(new Circle());

showShape(new Rectangle()); }

public static void showShape(ShapeObject shape) {

System.out.println("The area is: "+shape.getArea()); }

class ShapeObject {

double getArea() {} }

class Circle extends ShapeObject {

double getArea() {

return radius* radius * Math.PI;} }

class Rectangle extends ShapeObject {

double getArea() {

return length * width; } }

答案

(一)

由類別圖可以看出Rectangle 類別,Circle 類別繼承自shapeObject 類別,且有相同的方法getArea()



(二)

在main函式中,用相同函式showShape其參數shapeObject可傳入不同子類別物件,是為多型。如:

showShape (new Circle ());

showShape (new Rectangle ());

而在執行時,showShape 函式中,語句shape.getArea()會照shape 物件之型別是Rectangle 或Circle 類別而呼叫不同的getArea方法。是為動態連結(dynamic binding)

Chatgpt 回答

動態連結(Dynamic Binding)和多型(Polymorphism)是物件導向程式設計的重要概念。


1. 動態連結(Dynamic Binding):動態連結是指在執行時期,程式碼會根據實際物件的類型來決定要呼叫的方法。這允許使用父類別的引用來引用子類別的物件,並且在執行時期根據實際物件的類型來選擇正確的方法。在 Java 中,動態連結是默認行為。


2. 多型(Polymorphism):多型是指同一個介面(或基類別)可以擁有多種不同的實現方式。它允許你使用通用的方式處理不同類型的物件,而不需要關心實際的類型。多型的核心概念是子類別可以覆寫(override)父類別的方法,以提供特定的實現。


在你提供的 Java 程式碼中,你展示了動態連結和多型的運作方式。以下是針對你的程式碼的解釋:


1. `ShapeStore` 是主程式。

2. `ShapeObject` 是所有形狀的基類別,它包含一個 `getArea` 方法,但未提供實際的實現。

3. `Circle` 和 `Rectangle` 是 `ShapeObject` 的子類別,它們覆寫了 `getArea` 方法,分別提供了計算圓形和矩形面積的實現。

4. 在 `ShapeStore` 主程式中,你呼叫 `showShape` 方法,並傳入不同的形狀物件(`Circle` 和 `Rectangle`)。這裡發生了多型,因為 `ShapeObject` 的引用可以引用不同子類別的物件。

5. 在 `showShape` 方法中,使用 `shape` 的引用來呼叫 `getArea` 方法,而具體要呼叫哪個實現是在執行時期根據傳入的實際物件類型決定的。這就是動態連結的運作方式。

6. 程式會輸出每個形狀物件的面積。


這個例子展示了如何使用動態連結和多型,讓你能夠以通用的方式處理不同類型的形狀物件,而不需要修改 `showShape` 方法的程式碼。


Comments

Popular posts from this blog

How to write data into a excel file using vbscript

Format date as yyyy-mm-dd using vbscript