메소드 오버로드 처리하기 위해서는 오버로딩되는 함수를 정의하고 부모를 상속해서 실질적인 주소에 자신의 구조체 주소를 주면 자신의 구조체이 메소드가 호출되어 처리된다.
package main
import (
"fmt"
)
type Shaper interface {
Area() float64
}
// Parent Shape
type Shape struct {
Shaper
}
func (s *Shape) Area() float64 {
return 0
}
func (s *Shape) Doit() float64 {
return s.Shaper.Area()
}
type Rectangle struct {
Shape
x float64
y float64
}
func (r *Rectangle) Area() float64 {
return r.x * r.y
}
func main() {
s := new(Shape)
s.Shaper = s
fmt.Println(" parent ", s.Doit())
r := new(Rectangle)
r.Shape.Shaper = r
r.x = 5
r.y = 5
fmt.Println(" child ", r.Doit())
}
댓글
댓글 쓰기