Golang微服务入门到精通之路-3-类的封装/继承/多态/接口类型

一、封装

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

姚二龙

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值