面向对象编程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