4.23.3 پلی مورفیسم (Polymorphism)

4.23.3 پلی مورفیسم (Polymorphism)

پلی مورفیسم یکی از مفاهیم مهم در شی گرایی می باشد و هدف استفاده از پلی مورفیسم این است بین آبجکت ها رفتار مشترکی ایجاد کنیم. در زبان گو شما می توانید یک اینترفیس تعریف کنید و برای ساختارهای مختلف متدهای اینترفیس را پیاده سازی کنید.

به مثال زیر توجه کنید :

package main

import "fmt"

// Shape is an interface that defines a method named `Area`
type Shape interface {
	Area() float64
}

// Rectangle is a struct that represents a rectangle
type Rectangle struct {
	width  float64
	height float64
}

// Area implements the Shape interface for Rectangle
func (r Rectangle) Area() float64 {
	return r.width * r.height
}

// Circle is a struct that represents a circle
type Circle struct {
	radius float64
}

// Area implements the Shape interface for Circle
func (c Circle) Area() float64 {
	return 3.14 * c.radius * c.radius
}

func CalcArea(shapes ...Shape) {
	for _, shape := range shapes {
		fmt.Println(shape.Area())
	}
}

func main() {
	r := Rectangle{width: 10, height: 5}
	c := Circle{radius: 5}

	CalcArea(r, c)
}

در کد فوق ما یک اینترفیس Shape داریم که داخلش یک متد به نام Area هست حال این متد را برای ساختارهای Rectangle و Circle پیاده سازی کردیم که مساحت دایره و مستطیل را محاسبه کنیم. حال یک تابع CalcArea داریم به عنوان پارامتر slice از Shape ها میگیرد که ما داخل تابع main ساختار Rectangle و Circle که متد Area اینترفیس Shape را پیاده سازی کرده اند را پاس دادیم و در نهایت محاسبه مساحت را در خروجی چاپ می کند.