学习新语言方法总结(二)

上一篇介绍了学习语言的数据类型、流程控制,leetcode上刷几道题目应该对基本代码逻辑有所了解了。这一篇主要来说一下进阶模块:面向对象

OOP思想是编程中重要的一个模块,在各个语言都有大量的广泛运用,废话不多说,直接看go怎么实现

GO的面向对象

谈到面向对象,大脑条件反射的出现三个名词:封装、继承、多态,同样我们可以依葫芦画瓢,带着这三个名词来看看Go是个什么家伙

封装

golang中没有class关键字,通过struct来实现封装的,看代码

Go 复制代码
type Person struct {
    Name string
    sex  string
    age  int
}

一个Person结构体,封装了Name、sex、age属性,首字母大写的属性代表其他包引用的时候可以访问,理解成public,小写理解成private

继承

Go 复制代码
type Person struct {
    name string
    sex  string
    age  int
}

type Student struct {
    Person
    id   int
    addr string
}

func main() {
    // 初始化
    s1 := Student{Person{"5lmh", "man", 20}, 1, "bj"}
    fmt.Println(s1.name)
}

golang里面的继承是通过嵌入匿名字段实现,上面示例代码的student结构体嵌入了Person,然后通过给person初始化,就可以打印出name

多态

多态是允许不同类型的对象来执行相同的操作,实现代码的灵活性和扩展性

golang里面是通过接口来实现,直接看代码

Go 复制代码
package main

import "fmt"

type Shape interface {
	Area() float64
}

type Rectangle struct {
	width  float64
	height float64
}

func (r Rectangle) Area() float64 {
	return r.width * r.height
}

type Circle struct {
	radius float64
}

func (c Circle) Area() float64 {
	return 3.14 * c.radius * c.radius
}

func GetArea(s Shape) float64 {
	return s.Area()
}

func main() {
	r := Rectangle{width: 5, height: 3}
	c := Circle{radius: 4}

	fmt.Println("Rectangle area:", GetArea(r)) // 输出:Rectangle area: 15
	fmt.Println("Circle area:", GetArea(c))    // 输出:Circle area: 50.24
}

我们定义了个shape接口,然后创建Rectangle和Circle结构体来实现该接口,通过GetArea方法接收不同的结构体,调用接口里面的Area方法,来实现不同的类型执行相同的操作,也就是多态

通过以上示例,我们知道golang里面怎么实现了面向对象,了解了基本的使用,后面会深入探讨一下方法,细节的东西可以多动手去搜索了解,单独看一篇文章往往会左眼进右眼出

相关推荐
MartinYeung59 小时前
[论文学习]自主性如何重塑个性化对LLM智能体隐私关切与信任的影响
人工智能·学习
FellAveal10 小时前
【Go语言入门学习笔记】Part18.工作池与WaitGroup(也即协程池)
笔记·学习·golang
菜鸟‍11 小时前
【论文学习】MICCAI 2024 || SGSeg:通过自引导机制实现胸部X光片语言引导分割的无文本推理
人工智能·深度学习·学习
lazy H11 小时前
Git clone 怎么用?克隆项目及常见问题完整教程
大数据·git·后端·学习·搜索引擎·github
菜鸟‍11 小时前
【论文学习】arxiv 2024 || RoSIS:基于鲁棒框架重新审视文本提示式手术器械分割
人工智能·学习·计算机视觉
笨鸟先飞的橘猫12 小时前
只会脚本语言的游戏后端自我提升之路——c++学习(开篇)
学习·游戏
Z59981784113 小时前
c#软件开发学习笔记--Modbus-RTU通讯
笔记·学习·c#
绿浪198413 小时前
async/await 深入学习
学习
huameinan狮子14 小时前
数据分析基础:numpy学习
学习·数据分析·numpy
quanjui14 小时前
【医学尝试】基于Segment Anything Model的医学图像分割研究:眼底OCT与X线胸片微调实战
人工智能·笔记·学习