秒はgolangインタフェースを理解します
6363 ワード
インタフェースの詳細 を実現する.
C++の中の経典の例を持って見て、面積と周長を求めます は、circleタイプおよびrectangleタイプをそれぞれ定義し、その周長および面積を返す方法関数 を定義する.はgeometryタイプインタフェースを介して、この2つの方法 を宣言する. measure関数では、関数の受信者はインタフェースタイプ変数 である.しかし呼び出す時、直接circleとrectangleタイプの変数を詰め込むことができて、この2つのタイプの変数がインタフェースの中で宣言したすべての方法を実現したため、多態を実現して、1つの
実行結果:
は、コードがタイプの特定の実装に従って異なる動作をとることができる能力を指す.python
およびC++
には、クラスを継承する方法で書き換える、マルチステートmeasure
関数holdはこのインタフェースを実現したすべてのデータ型??package main
import (
"fmt"
"math"
)
type geometry interface {
area() float32
perimeter() float32
}
type rect struct {
width, height float32
}
type circle struct {
radius float32
}
func (r rect) area() float32 {
return r.height * r.width
}
func (c circle) area() float32 {
return math.Pi * c.radius * c.radius
}
func (r rect) perimeter() float32 {
return 2 * (r.height + r.width)
}
func (c circle) perimeter() float32 {
return 2 * math.Pi * c.radius
}
func measure(g geometry) {
fmt.Println(g.area())
fmt.Println(g.perimeter())
}
func main() {
r := rect{3, 4}
c := circle{3}
measure(r)
measure(c)
}
実行結果:
12
14
28.274334
18.849556