Golang 面向对象编程(OOP)超详细讲解

Golang 面向对象编程(OOP)超详细讲解


✅ 一、Go 支持 OOP 吗?

Go 虽然没有传统的 OOP 语法(如 class、extends、implements),但它依然支持 OOP 的三大核心特性

特性Go 支持方式
封装使用结构体 + 方法 + 首字母控制可见性
继承通过 组合(embedding) 实现
多态通过 接口(interface) 实现

🧱 二、结构体:Go 中的“类”基础

示例:

type Person struct {
    Name string
    Age  int
}

结构体(struct)相当于 OOP 中的类的成员变量。


🔐 三、封装(Encapsulation)

Go 通过结构体 + 方法 + 访问控制(大/小写)实现封装。

✅ 定义方法(绑定到结构体):

func (p Person) SayHello() {
    fmt.Println("Hello, my name is", p.Name)
}

注意 (p Person) 是接收者,可以理解为 this

✅ 使用指针接收者修改字段:

func (p *Person) SetAge(age int) {
    p.Age = age
}

📦 四、继承:Go 的组合(Embedding)

Go 没有 extends,用的是匿名结构体嵌套来实现“继承”行为。

示例:

type Animal struct {
    Name string
}
​
func (a Animal) Move() {
    fmt.Println(a.Name, "is moving")
}
​
type Dog struct {
    Animal  // 匿名嵌套,相当于“继承”
    Breed string
}
func main() {
    d := Dog{Animal: Animal{Name: "Buddy"}, Breed: "Labrador"}
    d.Move()  // ✅ 继承自 Animal
}

Dog 自动“继承”了 Animal 的字段和方法。


🧩 五、多态(Polymorphism)+ 接口(Interface)

接口是 Go 中的核心概念,用来实现多态。

示例:

type Speaker interface {
    Speak()
}
​
type Cat struct{}
func (c Cat) Speak() {
    fmt.Println("Meow")
}
​
type Dog struct{}
func (d Dog) Speak() {
    fmt.Println("Woof")
}
func MakeItSpeak(s Speaker) {
    s.Speak()
}
​
func main() {
    MakeItSpeak(Cat{}) // Meow
    MakeItSpeak(Dog{}) // Woof
}

✅ 多态体现:

  • 不同类型(Cat、Dog)实现相同接口(Speaker)

  • 函数 MakeItSpeak 接收统一的接口参数,实现“多态行为”


🧰 六、构造函数(Go 没有构造器语法,但可自定义)

func NewPerson(name string, age int) *Person {
    return &Person{Name: name, Age: age}
}
p := NewPerson("Tom", 18)

⚠️ 七、访问控制:包级私有 / 公有

名称前缀作用
大写字母可导出(公共)
小写字母包内可见(私有)

📚 八、完整 OOP 示例(结构体 + 封装 + 继承 + 多态)

package main
​
import "fmt"
​
type Animal interface {
    Speak()
}
​
type Dog struct {
    Name string
}
​
func (d Dog) Speak() {
    fmt.Println(d.Name, "says Woof")
}
​
type Cat struct {
    Name string
}
​
func (c Cat) Speak() {
    fmt.Println(c.Name, "says Meow")
}
​
func MakeItSpeak(a Animal) {
    a.Speak()
}
​
func main() {
    dog := Dog{Name: "Buddy"}
    cat := Cat{Name: "Kitty"}
​
    MakeItSpeak(dog)
    MakeItSpeak(cat)
}

🔍 九、Go OOP 与传统 OOP 的对比

特性Java / C++Go
classstruct
方法class methodstruct method (接收者)
构造函数构造器语法自定义工厂函数 NewXXX()
继承extends / super组合 embedding
接口implements自动实现 interface
多态虚方法 / 多态指针接口多态(interface)

✅ 十、总结一句话

Go 的 OOP 没有传统的 class 和继承语法,而是通过 结构体、接口、组合 来实现面向对象的核心三特性:封装、继承、多态。

👉 立即点击链接,开启你的全栈开发之路:Golang全栈开发完整课程

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值