Go语言中面向对象

OOP思想

Go不是纯面向对象的语言

Go没有面向对象的三大特征(封装,继承,多态)

Go通过结构体嵌套模拟继承

继承,提升字段

type Person struct {
	name string
	age  int
}
type Student struct {
	Person        //匿名变量
	school string //子类自己的属性字段

}

func main() {
	p1 := Person{"周南", 18}
	fmt.Println(p1)
	s1 := Student{Person{name: "周南", age: 20}, "清华"}
	fmt.Println(s1.name)

	var s3 Student
	s3.name = "打阿伟"
	fmt.Println(s3)
}

方法讲解

type Dog struct {
	name string
	age  int
}

func (Dog) sleep() {
	fmt.Println("睡觉")

}

func (dog Dog) eat() {
	fmt.Println("Dog shutting")
}

type Cat struct {
	name string
	age  int
}

func (cat *Cat) eat() {
	fmt.Println("Cat shutting")
	cat.name = "黑黑"

}

func main() {
	d1 := Dog{"小白", 2}
	d1.eat()
	d1.sleep()
	fmt.Println(d1)
	c1 := Cat{}
	c1.eat()
	fmt.Println(c1)

}

方法重写

type Animal struct {
	name string
	age  int
}

type Dog2 struct {
	Animal
}
type Cat2 struct {
	Animal
}

func (animal Animal) eat() {
	fmt.Println("吃东西")
}
func (dog Dog2) eat() {
	fmt.Println("狗吃")
}

func main() {
	dog := Dog2{Animal{"名字", 2}}
	fmt.Println(dog)
	dog.eat()
	cat := Cat2{Animal{name: "小黑", age: 2}}
	fmt.Println(cat)
	cat.eat()

}

接口实现

type Usb interface {
	oInput()
	oOutput()
}
type Mouse struct {
	name string
}

func (mouse Mouse) oInput() {
	fmt.Println(mouse.name + "点击了")
}
func (mouse Mouse) oOutput() {
	fmt.Println(mouse.name + "离开了")
}
func (mouse Mouse) oOutput1() {
	fmt.Println(mouse.name + "罗森离开了")
}
func main() {
	mouse := Mouse{name: "雷蛇"}
	mouse.oOutput()
	mouse.oInput()
	mouse.oOutput1()
	fmt.Println(mouse)

}

接口实现多态

type Animal1 interface {
	eat()
	sleep()
}
type Pig struct {
	name string
}

func (pig Pig) eat() {
	fmt.Println(pig.name, "吃饭")

}
func (pig Pig) sleep() {
	fmt.Println(pig.name, "睡觉")

}
func text1(a Animal1) {
	fmt.Println("text1")
	a.eat()
	a.sleep()

}
func main() {
	p := Pig{name: "骚逼"}
	fmt.Println(p)
	p.eat()
	p.sleep()
	//实现类实现了这个接口,所有定义这个接口的地方都可以传入这个实现类
	text1(p)
	//定义一个类型为接口的变量
	//实际上可以赋值任何实现其接口实现类的对象
	var animal Animal1
	animal = p
	fmt.Println(animal)

}

空接口

type Dog1 struct {
	name string
}
type Cat1 struct {
	name string
	age  int
}

func (d Dog1) eat() {
	fmt.Println(d.name, "吃了")
}

type A interface {
}

func testa(a A) {
	fmt.Println(a)
}

// fmt 下面的输出接收参数都是这样的
func textab(a interface{}) {
	fmt.Println(a)
}
func main() {
	var a1 A = Dog1{name: "皱起远"}
	var a2 A = Cat1{name: "朱加祎", age: 12}
	var a3 A = 100
	fmt.Println(a1)
	fmt.Println(a2)
	fmt.Println(a3)

	d := Dog1{"小黑"}
	testa(d)
	fmt.Println(d)
	//map  k string v obj
	map1 := make(map[string]interface{})
	map1["name"] = "周南"
	map1["age"] = 20
	map1["addr"] = "怀德"
	fmt.Println(map1)

	//切片
	s1 := make([]interface{}, 0, 10)
	s1 = append(s1, a1, a2, a3, 1, 1, 1, 1)
	fmt.Println(s1)
	//总结 interface{}接口是一个万能对象相当于java中的object

}

接口继承

type AA interface {
	test1()
}
type BB interface {
	test2()
}
type CC interface {
	AA
	BB
	test3()
}

type DD struct {
	name string
}

func (dd DD) test1() {
	fmt.Println("test1")
}
func (dd DD) test2() {
	fmt.Println("test2")
}
func (dd DD) test3() {
	fmt.Println("test3")
}

func main() {
	var d DD = DD{"周南"}
	d.test1()
	d.test2()
	d.test3()
	var ia AA = d
	ia.test1()
	fmt.Println(ia)
	var ic CC = d
	ic.test3()
	fmt.Println(ic)

}

接口断言

func main() {
	asserString("aaa")
	asserInt(1)

}
func asserInt(i interface{}) {
	s, ok := i.(int)
	if ok {
		fmt.Println("接口变量i是int类型")
		fmt.Println(s)
	} else {
		fmt.Println("接口变量i不是int类型")
	}
}

func asserString(i interface{}) {
	s := i.(string)
	fmt.Println(s)
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值