Go语言面向对象

Go语言支持一些面向对象的特性,例如封装、继承和多态。这些功能主要依赖于结构体和接口来实现。

封装
封装是指将数据和方法隐藏在结构体内部,对外只暴露接口,从而实现数据的隐藏和方法的重用。可以通过结构体来实现封装。结构体可以包含成员变量和成员方法,成员变量默认是私有的,只能在结构体内部访问,成员方法可以是公开的,也可以是私有的。

type Person struct {
    name string
    age int
}
 
func (p *Person) SayHello() {
    fmt.Println("Hello, my name is", p.name)
}
 
func main() {
    p := Person{name: "John", age: 30}
    p.SayHello()
}

在这个例子中,Person结构体包含两个成员变量:name和age,以及一个成员方法:SayHello()。name和age是私有的,只能在Person结构体内部访问,SayHello()是公开的,可以在外部访问。

继承
继承是指子类可以继承父类的属性和方法,从而实现代码的重用。可以通过类型嵌入来实现继承。类型嵌入是指将一个类型嵌入到另一个类型中,从而使子类型拥有父类型的所有属性和方法。

type Animal struct {
    name string
}
 
func (a *Animal) Speak() {
    fmt.Println("I am an animal")
}
 
type Dog struct {
    Animal
    breed string
}
 
func (d *Dog) Bark() {
    fmt.Println("Woof!")
}
 
func main() {
    d := Dog{Animal{name: "Fido"}, breed: "Labrador"}
    d.Speak()
    d.Bark()
}

在这个例子中,Dog类型嵌入了一个Animal类型,因此Dog类型拥有Animal类型的所有属性和方法,包括name和Speak()方法。

多态
多态是指同一个操作可以作用于不同类型的对象,从而实现代码的通用性。可以通过接口来实现多态。接口是一种类型,它定义了一组方法。任何类型只要实现了接口中的所有方法,就实现了该接口。

type Speaker interface {
    Speak()
}
 
type Animal struct {
    name string
}
 
func (a *Animal) Speak() {
    fmt.Println("I am an animal")
}
 
type Dog struct {
    Animal
    breed string
}
 
func (d *Dog) Bark() {
    fmt.Println("Woof!")
}
 
func main() {
    var s Speaker
 
    s = &Animal{name: "Fido"}
    s.Speak()
 
    s = &Dog{Animal{name: "Spot"}, breed: "Dalmation"}
    s.Speak()
}

在这个例子中,Speaker接口定义了一个Speak()方法。Animal类型和Dog类型都实现了Speak()方法,因此它们都实现了Speaker接口。

在main()函数中,我们将Animal类型的指针和Dog类型的指针都赋值给了Speaker类型的变量s。然后,我们调用s.Speak()方法,结果会根据s指向的具体类型而执行不同的操作。

                        版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

原文链接:https://blog.csdn.net/foreverimps/article/details/136223031

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值