GO 面向对象编程
所属分类 go
浏览量 863
结构体可以有方法,相当于类
没有class,只有struct
用指针访问结构中的属性 用 . 而不是 -> ,指针像Java中的引用
没有public,protected,private等访问权限控制
大写 public ,小写 private
支持接口和多态
接口不需要显式声明
Duck Type
只要 有 interface 相同的方法,就认为实现了该接口
只要能像鸭子那样叫,就认为它是一只鸭子
https://gitee.com/dyyx/hellocode/blob/master/web/tech/go/demo/oopdemo.go
package main
import (
"fmt"
"math"
)
type Pet struct {
name string
age int
}
func (p *Pet) getName() string {
return p.name
}
type shape interface {
area() float64
}
type rect struct {
width float64
height float64
}
func (r *rect) area() float64 {
return r.width * r.height
}
type circle struct {
radius float64
}
func (c *circle) area() float64 {
return math.Pi * c.radius * c.radius
}
func main() {
testStruct()
testInterface()
}
func testStruct() {
p1 := Pet{"cat", 3}
p2 = Pet{name: "tiger", age: 7}
fmt.Printf("%v,name=[%s]\n", p1, p1.getName())
fmt.Printf("%v,name=[%s]\n", p2, p2.getName())
ptr1 := &p1
fmt.Printf("%v,name=[%s]\n", ptr1, ptr1.getName())
ptr1.age = 5
ptr1.name = "cat2"
fmt.Printf("%v,name=[%s]\n", ptr1, ptr1.getName())
}
func testInterface() {
r := rect { width: 3.0, height: 2.1 }
c := circle { radius: 3.0 }
s := []shape{ &r, &c }
for i, sh := range s {
fmt.Printf("Shape[%d] area=[%f]\n", i, sh.area())
}
}
上一篇
下一篇
GO内建函数
GO make 和 new的区别
GO结构体三种初始化方式
GO reflect
GO基础选择题
MySQL timestamp 类型