Go语言 类多态

本篇文章主要为Go语言 类相关多态内容定义及示例。

目录

多态

定义接口

赋值并调用

多态

说明

总结


多态

Go语言的多态不需要继承,只要实现相同的接口即可。

定义接口

实现go多态,需要实现定义接口。

定义一个接口,类型是interface。

人类的武器发起攻击,不同的登记子弹效果不同。

示例如下:

Go 复制代码
package main

import "fmt"

// 实现go多态,需要实现定义接口。
// 人类的武器发起攻击,不同的登记子弹效果不同。

// 定义一个接口,类型是interface。
type IAttack interface {
   // 接口函数可以有多个,但是只能有函数,而不能实现
   Attack()
}

// 低等级
type HumanLowLevel struct {
   name  string
   level int
}

func (this *HumanLowLevel) Attack() {
   fmt.Println("我是:", this.name, " 等级:", this.level)
}

赋值并调用

定义一个包含Attack的接口变量。

对player赋值为lowLevel,接口需要使用指针类型来赋值。

示例如下:

Go 复制代码
func main() {
   // 定义一个包含Attack的接口变量
   var player IAttack

   lowLevel := HumanLowLevel{
      "Mike",
      1,
   }
   highLevel := HumanLowLevel{
      "John",
      10,
   }
   lowLevel.Attack()
   highLevel.Attack()

   // 对player赋值为lowLevel,接口需要使用指针类型来赋值
   player = &lowLevel
   player.Attack()

   player = &highLevel
   player.Attack()
}

值接收者和指针接收者,二者都可以调用方法。

因为 Go 语言编译器自动做了转换,

所以值类型接收者和指针类型接收者是等价的。

多态

定义一个多态的通用接口,传入不同的对象,调用同样的方法,实现不同的效果。

示例如下:

Go 复制代码
func DoAttack(a IAttack) {
   a.Attack()
}

func main() {
   // 定义一个包含Attack的接口变量
   var player IAttack

   lowLevel := HumanLowLevel{
      "Mike",
      1,
   }
   highLevel := HumanLowLevel{
      "John",
      10,
   }
   lowLevel.Attack()
   highLevel.Attack()

   // 对player赋值为lowLevel,接口需要使用指针类型来赋值
   player = &lowLevel
   player.Attack()

   player = &highLevel
   player.Attack()


   fmt.Println("多态......")
   DoAttack(&lowLevel)
   DoAttack(&highLevel)
}

说明

1.定义一个接口,里面设计好需要的接口,可以有多个

2.任何实现了这个接口的类型,都可以赋值给这个接口,从而实现多态

3.多个类之间不需要有继承关系

4.如果interface中定义了多个接口,那么实际的类必须全部实现接口函数,才可以赋值

总结

本篇文章主要为Go语言 类相关多态内容定义及示例。

相关推荐
李慕婉学姐几秒前
Springboot面向电商的仓库管理系统05uc4267(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
数据库·spring boot·后端
Mojitocean12 分钟前
Golang入门
golang
布茹 ei ai27 分钟前
QtWeatherApp - 简单天气预报软件(C++ Qt6)(附源码)
开发语言·c++·qt·开源·开源项目·天气预报
Wpa.wk28 分钟前
自动化测试 - 文件上传 和 弹窗处理
开发语言·javascript·自动化测试·经验分享·爬虫·python·selenium
用户990450177800928 分钟前
ruoyi-vue2集成flowable6.7.2后端篇
后端
LinHenrY122730 分钟前
初识C语言(编译和链接)
c语言·开发语言·蓝桥杯
_OP_CHEN30 分钟前
【Python基础】(二)从 0 到 1 入门 Python 语法基础:从表达式到运算符的全面指南
开发语言·python
l1t31 分钟前
利用小米mimo为精确覆盖矩形问题C程序添加打乱函数求出更大的解
c语言·开发语言·javascript·人工智能·算法
qq_124987075333 分钟前
基于springboot框架的小型饮料销售管理系统的设计与实现(源码+论文+部署+安装)
java·spring boot·后端·spring·毕业设计
我命由我1234539 分钟前
Python Flask 开发:在 Flask 中返回字符串时,浏览器将其作为 HTML 解析
服务器·开发语言·后端·python·flask·html·学习方法