Golangのインターフェースを使用した多態性の実装方法は何ですか?
Go言語では、インターフェースは多態性を実現することができます。多態性とは、異なる型が同じ振る舞いを示すことを指します。
多態性を実現するには、インターフェースを定義し、異なるタイプでそのインターフェースを実装する必要があります。そして、インターフェース型の変数を使用して、インターフェースが実装されたメソッドを呼び出すことで、多態性を実現できます。
ポリモーフィズムを実現する方法は次のとおりです:
- インターフェースを定義する:まず、インターフェースを定義し、その中で実装する必要のあるメソッドを宣言する必要があります。
type Shape interface {
Area() float64
Perimeter() float64
}
- 異なるタイプでインターフェースを実装し、メソッドの具体的な実装を提供する。
type Rect struct {
width float64
height float64
}
func (r Rect) Area() float64 {
return r.width * r.height
}
func (r Rect) Perimeter() float64 {
return 2 * (r.width + r.height)
}
type Circle struct {
radius float64
}
func (c Circle) Area() float64 {
return math.Pi * c.radius * c.radius
}
func (c Circle) Perimeter() float64 {
return 2 * math.Pi * c.radius
}
- 多様性の利用:インタフェース型の変数を使用して、インタフェースを実装したメソッドを呼び出す。
func printShapeInfo(s Shape) {
fmt.Println("Area:", s.Area())
fmt.Println("Perimeter:", s.Perimeter())
}
func main() {
rect := Rect{width: 5, height: 3}
circle := Circle{radius: 2}
printShapeInfo(rect)
printShapeInfo(circle)
}
上記の例では、ShapeインターフェースはArea()とPerimeter()の2つのメソッドを定義しています。次に、RectとCircle構造体がそれぞれShapeインターフェースを実装し、これらのメソッドの具体的な実装を提供しています。
main関数では、Rect型の変数rectとCircle型の変数circleを作成します。その後、printShapeInfo関数を呼び出し、rectとcircleを渡すことで、多態性を実現します。printShapeInfo関数の引数の型はShapeインターフェースであるため、Shapeインターフェースを実装した任意の型を渡し、対応するメソッドを呼び出すことができます。
最終的な結果は、RectとCircleの面積と周囲の合計です。これは、インターフェースを使用して多態性が実装され、異なるタイプの変数が同じ振る舞いを示すことができることを示しています。