面向对象编程OOP

面向对象编程OOP

一 Go语言OOP

但面向对象的思想凌驾于任何具体的技术之上,虽说go并不是一个纯面向对象的编程语言,但仍可以实现OOP

  • 1、结构体即”类”
  • 2、方法即绑定方法
  • 3、定义方法New()或NewT()代替构造函数

package main
import (
"fmt"
)
// 类
type Person struct {
name string
gender string
age int
}
// 构造函数
func NewPerson(name string, gender string, age int) *Person {
return &Person{
name: name,
gender: gender,
age: age,
}
}
// 绑定方法
func (p *Person) tell() {
fmt.Printf("%v:%v:%v\n", p.name, p.gender, p.age)
}
func main() {
p1 := NewPerson("egon", "male", 18)
p1.tell() // egon:male:18
}

二 结构体的“继承“与“派生”

基于结构体嵌套的思想,Go语言中的结构体也可以实现其他编程语言中面向对象的继承。

// ==================”父类“:Person==================
type Person struct {
name string
gender string
age int
}
func (p *Person) tell() {
fmt.Printf("%v:%v:%v\n", p.name, p.gender, p.age)
}
func (p *Person) setAge(age int) {
p.age = age
}
// ==================”子类“:Teacher==================
type Teacher struct {
*Person // 嵌套结构体指针,此处可声明为匿名字段
level int
}
// 派生:可以在子类产生的新方法中重用父类的功能
func (t Teacher) tell() {
fmt.Printf("%v:", t.level)
t.Person.tell() // 调用t.tell()则冲突了
}
// ==================使用==================
func main() {
t1 := Teacher{
&Person{
"egon",
"male",
18,
},
10,
}
t1.setAge(20)
t1.Person.tell() // egon:male:20
t1.tell() // 10:egon:male:20
}

method是可以继承的

联系管理员微信tutu19192010,注册账号

上一篇
下一篇
Copyright © 2022 Egon的技术星球 egonlin.com 版权所有 沪ICP备2022009235号 沪公网安备31011802005110号 青浦区尚茂路798弄 联系方式-13697081366