golang如何体现面向对象思想

Golang没有类(class),Go语言的结构体(struct)和其它编程语言的类(class)有同等的地位,你可以理解Golang是基于struct来实现OOP特性的。

Golang仍然有面向对象编程的继承,封装和多态的特性,只是实现的方式和其它OOP语言不一样,比如继承:Golang没有extends关键字,继承是通过匿名字段来实现的。

Golang面向对象编程非常简洁,去掉了传统OOP语言的继承、方法重载、构造函数和析构函数、隐藏的this指针等等。

Golang仅支持聚合和嵌入,提倡面向接口编程。

Golang的封装通过struct(结构体)实现,继承通过匿名字段实现,多态通过interface(接口)实现

封装

在Java里面,我们使用public,private,protected关键字来作为变量或者函数的权限设置,但在Go语言中,GO语言只有大小写的区别,如果想把函数或者变量暴露在外部,那么就首字母大写,相反则小写。

继承(匿名字段+匿名函数)

匿名字段实现了成员变量的继承。

复制代码
type Person struct {
    Name string
    Age int
    Gender string
} 

type Student struct {
    Person //通过匿名组合方式嵌入了Person属性
    Score float64
}
复制代码

 在函数声明时,在其名字之前放上一个变量,即是一个方法。这个附加的参数会将该函数附加到这种类型上,即相当于为这种类型定义了一个独占的方法。

复制代码
package main

import "math"
import "fmt"

type Point struct {
    x float64
    y float64
}

func TraDistance(p1 Point, p2 Point) float64 {
    return math.Hypot(p1.x-p2.x, p1.y-p2.y)
}
func (p1 Point) ObjDistance(p2 Point) float64 {
    return math.Hypot(p1.x-p2.x, p1.y-p2.y)
}
func main() {
    p1 := Point{10, 20}
    p2 := Point{20, 10}
    old_len := TraDistance(p1, p2)
    new_len := p1.ObjDistance(p2)
    fmt.Println("The result of old method is ", old_len)
    fmt.Println("The result of OBJ method is ", new_len)
}
复制代码

 

多态(interface)

特点

1. interface 是⽅法声明的集合

2. 任何类型的对象实现了在interface 接⼝中声明的全部⽅法, 则表明该类型实现了该接⼝。

3. interface 可以作为⼀种数据类型, 实现了该接⼝的任何对象都可以给对应的接⼝类型变量赋值

注意

a. interface 可以被任意对象实现,⼀个类型/对象也可以实现多个 interface  

b. ⽅法不能重载,如 eat(), eat(s string) 不能同时存在

 

interface⼀定要和多态的特性结合

多态的三要素

1 有⼀个⽗类的接⼝(抽象)

2 有⼦类重写⽗类的全部接⼝⽅ 法

3 ⽗类(接⼝类型) 指针/引⽤ 指 向⼦类对象

⼀旦有interface出现 ,⼀定要针对interface去写业 务

多态具有架构思想和调⽤未来代码的意义

⾯向对象的开闭原则

给⼀个类添加⼀个新的功能,不需要修改该类,⽽是通过额外的 添加代码来实现,保证了之前原有系统的安全性

⾯向对象的依赖倒转原则

抽象层

先设计抽象层接⼝,实现⼀个⼀个的interface

设计难度较⼤,不要轻易修改

实现层

⾯向抽象层 是实现具体的类,将接⼝全部实现

业务逻辑层

⾯向抽象层,去编织业务逻辑

 

总结:接⼝的意义 多态的思想 调⽤未来

posted @   Mr.peter  阅读(335)  评论(0编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
历史上的今天:
2019-09-21 看准未来之紧盯国内互联网巨头动向
点击右上角即可分享
微信分享提示