一、封装
package main
import "fmt"
//封装
// 结果体先定义类属性
type Person struct {
name string
age int
gender string
}
// 绑定属性 在方法名前加:(p Person)
func (p Person) Eat() (msg string) {
msg = "Person is eating:" + p.name
//fmt.Println(msg)
return
}
func main() {
ppl := Person{
name: "泡泡龙",
age: 23,
gender: "男",
}
fmt.Println(ppl)
fmt.Println(ppl.Eat())
}
二、继承
package main
import (
"fmt"
"strconv"
)
/*
类与方法、属性注意点
pubic:大写开头
private:小写开头
*/
// 父类
type Human struct {
name string
age int
gender string
}
type Study struct {
Human
school string
}
func (s Study)my() {
msg:="我叫:"+s.name+",来自"+s.school+"今年"+strconv.Itoa(s.age)+"岁"
fmt.Println(msg)
}
func main() {
ppl := Study{
Human: Human{"ppl", 20, "男"},
school: "深圳大学",
}
fmt.Println(ppl)
ppl.my()
}
三、多态
package main
import (
"fmt"
"strconv"
)
// 定义一个接口类型
type IAttack interface {
Attack()
}
type Level1 struct {
name string
level int
}
type Level2 struct {
name string
level int
}
func (p Level1) Attack() {
fmt.Println("我叫"+p.name, ",我的等级为:"+strconv.Itoa(p.level))
}
func (p Level2) Attack() {
fmt.Println("我叫"+p.name, ",我的等级为:"+strconv.Itoa(p.level))
}
func main() {
var ppl IAttack // 定义一个 IAttack 接口类变量
// 低等级
p1 := Level1{
name: "天涯明月刀",
level: 100,
}
// 高等级
p2 := Level2{
name: "倚天屠龙刀",
level: 1000,
}
ppl = &p1 // 赋值给同一对象 ppl
ppl.Attack()
ppl = &p2 // 赋值给同一对象 ppl
ppl.Attack()
}
/*
1.定义一个接口,里面设计好需要的接口,可以有多个
2.任何实现了这个接口的类型,都可以赋值给这个接口,从而实现多态
3.多个类之间不需要有继承关系
4.如果interface中定义了多个接口,那么实际的类必须全部实现接口函数,才可以赋值
*/
四、接口类型
package main
import "fmt"
var a, b, c interface{}
// 通用入参接口
func myType() {
array := make([]interface{}, 3)
array[0] = 1
array[1] = "ppl"
array[2] = false
for _, v := range array {
switch v := v.(type) {
case string:
fmt.Println("this string ", v)
case int:
fmt.Println("this is ", v)
case bool:
fmt.Println("this is ", v)
default:
fmt.Println("this is error", v)
}
}
}
func main() {
//var i, j, k interface{}
names := []string{"ppl", "lili"}
a = names
fmt.Println("i:", a)
age := 20
b = age
fmt.Println("j:", b)
str := "ppl"
c = str
fmt.Println("k:", c)
myType()
}
欢迎来大家QQ交流群一起学习:482713805