一文详解Go语言的面向对象

持续更新中

1. 封装

2. 继承

3. 多态

在Go语言中,多态是通过接口来实现的,可以按照统一的接口来调用不同的实现,这时接口变量就呈现出不同的状态
话不多说,先上代码

1. 多态参数
package main

import (
	"fmt"
)

type Usb interface {
	// 声明两个没有实现的方法
	Start()
	Stop()
}

type Phone struct {
}

func (p Phone) Start() {
	fmt.Println("手机开始工作...")
}

func (p Phone) Stop() {
	fmt.Println("手机停止工作...")
}

type Camera struct {
}

func (c Camera) Start() {
	fmt.Println("相机开始工作...")
}

func (c Camera) Stop() {
	fmt.Println("相机停止工作...")
}

type Computer struct {

}

// 接收一个Usb接口类型变量,只要实现了Usb接口 (所谓实现了Usb接口,就是指实现了Usb接口声明的所有方法)
// 多态在python中通过方法来实现,在Go中通过接口来实现
func (c Computer) Working(usb Usb) {
	// 通过usb接口变量来调用start和stop方法
	usb.Start()
	usb.Stop()
}

func main() {
	computer := Computer{}

	phone := Phone{}
	computer.Working(phone)

	camera := Camera{}
	computer.Working(camera)
}

如上所示,我们并不关心是什么东西传入到了computer中,只要这个东西实现了Start()和Stop()这两个方法,我们就认为这个东西实现了usb接口,我们就可以通过computer去调用working去开始工作,这是典型的多态的实现

2. 多态数组
package main

import (
	"fmt"
)

type Usb interface {
	// 声明两个没有实现的方法
	Start()
	Stop()
}

type Phone struct {
	PhoneNum string
}

func (p Phone) Start() {
	fmt.Println("手机开始工作...")
}

func (p Phone) Stop() {
	fmt.Println("手机停止工作...")
}

func (p Phone) Call() {
	fmt.Printf("给 %s 打电话...\n", p.PhoneNum)
}

type Camera struct {
	Name string
}

func (c Camera) Start() {
	fmt.Println("相机开始工作...")
}

func (c Camera) Stop() {
	fmt.Println("相机停止工作...")
}

func (c Camera) TakePhone() {
	fmt.Printf("使用 %s 拍照\n", c.Name)
}

type Computer struct {

}

func (c Computer) Working(usb Usb) {
	usb.Start()
	// 这里使用了类型断言,通过不同的类型去执行不同的方法
	switch usb.(type) {
	case Phone:
		usb.(Phone).Call()
	case Camera:
		usb.(Camera).TakePhone()
	default:
		fmt.Println("暂时不可识别的类型")
	}
	usb.Stop()
}

func main() {
	var computer Computer
	// 定义一个Usb接口数组,可以存放Phone和Camera结构体变量
	var usbArr [3]Usb
	usbArr[0] = Phone{"110"}
	usbArr[1] = Phone{"120"}
	usbArr[2] = Camera{"詹姆的相机"}
	for _, usbIns := range usbArr {
		computer.Working(usbIns)
	}
}
Python是一门支持面向对象编程的语言,它通过类(Class)和对象(Object)的概念实现了这一特性。以下是关于Python面向对象编程的一般理解: 1. **类(Class)**:类是一种模板或蓝图,用于创建具有相似属性和行为的对象。类定义了数据成员(如变量)和方法(函数),它们描述了对象的状态和行为。 2. **对象(Object)**:对象是类的实例,它是现实世界的一个实体。每个对象都具有特定的属性值,并能够执行其类中定义的方法。 3. **属性(Attribute)**:类中的变量就是对象的属性,它们可以存储数据。比如,一个人类对象可能有姓名、年龄这样的属性。 4. **方法(Method)**:类中的函数是对象的行为,例如获取信息(getter)、设置信息(setter)、执行动作等。比如,人的类可能会有一个方法“说话”(speak)。 5. **封装(Encapsulation)**:将数据和操作数据的代码打包成类,隐藏实现细节,仅对外提供接口访问,保护数据的安全性。 6. **继承(Inheritance)**:子类可以继承父类的属性和方法,通过"IS-A"关系实现代码复用。子类可以添加新的属性和方法,也可以覆盖或扩展父类的方法。 7. **多态(Polymorphism)**:同一种行为可以在不同的对象上表现出不同的形式,包括静态多态(方法重载)和动态多态(方法重写或虚函数)。 8. **构造函数(Constructor)**:特殊的方法,当创建新对象时自动执行,通常用于初始化对象的属性。 9. **析构函数(Destructor)**:特殊的方法,在对象生命周期结束时自动执行,用于清理资源。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值