go语言(十二)----多态

这篇具有很好参考价值的文章主要介绍了go语言(十二)----多态。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一. 多态的基本要素

  1. 有一个父类(有接口)
  2. 有子类(实现了父类的全部方法)
  3. 父类类型的变量(指针)指向(引用)子类的具体数据变量

首先,定义一个父类

//本质是一个指针
type AnimalIF interface {
	Sleep()
	GetColor() string
	GetType() string
}

其次,有一个子类


//具体的类
type Cat struct {
	color string
}

func (this *Cat) Sleep() {
	fmt.Println("Cat is Sleep")
}

func (this *Cat) GetColor() string  {
	return this.color
}

func (this *Cat) GetType() string {
	return "Cat"
}

最后,是赋值

	animal.Sleep()//多态
	animal = &Cat{"Green"}
	animal.Sleep()

完整例子:

package main

import "fmt"

//本质是一个指针
type AnimalIF interface {
	Sleep()
	GetColor() string
	GetType() string
}

//具体的类
type Cat struct {
	color string
}

func (this *Cat) Sleep() {
	fmt.Println("Cat is Sleep")
}

func (this *Cat) GetColor() string  {
	return this.color
}

func (this *Cat) GetType() string {
	return "Cat"
}


func main() {
	
	var animal AnimalIF //接口的数据类型
	animal = &Cat{"Green"}
	animal.Sleep() //调用的是cat的sleep方法
}

go语言(十二)----多态,golang,开发语言,后端
当然,也可以这么写:

package main

import "fmt"

//本质是一个指针
type AnimalIF interface {
	Sleep()
	GetColor() string
	GetType() string
}

//具体的类
type Cat struct {
	color string
}

func (this *Cat) Sleep() {
	fmt.Println("Cat is Sleep")
}

func (this *Cat) GetColor() string  {
	return this.color
}

func (this *Cat) GetType() string {
	return "Cat"
}

type Dog struct {
	color string
}


func (this *Dog) Sleep() {
	fmt.Println("Cat is Sleep")
}

func (this *Dog) GetColor() string  {
	return this.color
}

func (this *Dog) GetType() string {
	return "Cat"
}
func showAnimal(animal AnimalIF) {
	animal.Sleep()//多态
	fmt.Println("color =",animal.GetColor())
	fmt.Println("kind = ",animal.GetType())
}




func main() {

	cat := Cat{"Green"}
	dog := Dog{"Yellow"}
	showAnimal(&cat)
	showAnimal(&dog)
	//
	//var animal AnimalIF //接口的数据类型
	//animal = &Cat{"Green"}
	//animal.Sleep() //调用的是cat的sleep方法
}

go语言(十二)----多态,golang,开发语言,后端文章来源地址https://www.toymoban.com/news/detail-813072.html

到了这里,关于go语言(十二)----多态的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 6 接口、多态、断言、项目【Go语言教程】

    1.1 概念 Golang 中 多态特性主要是通过接口来体现的。 interface 类型可以定义一组方法,但是这些不需要实现。并且 interface 不能包含任何变量。到某个自定义类型(比如结构体 Phone)要使用的时候,在根据具体情况把这些方法写出来(实现)。 说明: 接口里的所有方法都没有方法体

    2024年02月04日
    浏览(42)
  • 《Go 语言第一课》课程学习笔记(十二)

    在 Go 语言中,函数是唯一一种基于特定输入,实现特定任务并可返回任务执行结果的代码块(Go 语言中的方法本质上也是函数)。 在 Go 中,我们定义一个函数的最常用方式就是使用函数声明。 第一部分是 func,Go 函数声明必须以 func 开始。 第二部分是函数名。

    2024年02月11日
    浏览(49)
  • [JavaWeb]【十二】web后端开发-事务管理&AOP

    目录 一、事务管理 1.1 事务回顾 1.2 Spring事务管理 1.2.1 案例  1.2.1.1 EmpMapper新增deleteByDeptId方法  1.2.1.2 DeptServiceImpl   1.2.1.3 启动服务-测试  1.2.2 模拟异常 1.2.3  分析问题  1.2.4 Spring事务管理(一般用在类似多次delete)  1.2.4.1 开启事务开关application.yml 1.2.4.2  DeptServiceImpl 

    2024年02月11日
    浏览(36)
  • Golang:Go语言结构

    在我们开始学习 Go 编程语言的基础构建模块前,让我们先来了解 Go 语言最简单程序的结构。 Go 语言的基础组成有以下几个部分: 包声明 引入包 函数 变量 语句 表达式 注释 接下来让我们来看下简单的代码,该代码输出了\\\"Hello World!\\\": 让我们来看下以上程序的各个部分: 第一

    2024年02月10日
    浏览(57)
  • golang实现webgis后端开发

    目录 前言 二、实现步骤 1.postgis数据库和model的绑定 2.将pg库中的要素转换为geojson (1)几何定义 (2)将wkb解析为几何类型 (3)定义geojson类型 (4)数据转换 (5)数据返回  2.前端传入的geojson储存到数据库 3、其他功能实现 总结         停更了接近一个月都在研究一门新语言gola

    2024年02月08日
    浏览(49)
  • 【Golang】VScode配置Go语言环境

    安装VScode请参考我的上一篇博客:VScode安装_㫪548的博客-CSDN博客 接下来我们直接进入正题: Go语言(又称Golang)是一种开源的编程语言,由Google开发并于2009年首次发布。Go语言具有简洁、高效、可靠和易于阅读的特点,被设计用于解决大型项目的开发需求。它结合了静态类型

    2024年02月03日
    浏览(64)
  • 【GoLang】MAC安装Go语言环境

    小试牛刀 首先安装VScode软件 或者pycharm mac安装brew软件  brew install go 报了一个错误 不提供这个支持  重新brew install go 之后又重新brew reinstall go 使用go version 可以看到go 的版本 使用go env  可以看到go安装后的配置 配置一个环境变量 vim ~/.zshrc,  

    2024年02月15日
    浏览(56)
  • Go语言(Golang)数据库编程

    要想连接到 SQL 数据库,首先需要加载目标数据库的驱动,驱动里面包含着于该数据库交互的逻辑。 sql.Open() 数据库驱动的名称 数据源名称 得到一个指向 sql.DB 这个 struct 的指针 sql.DB 是用来操作数据库的,它代表了0个或者多个底层连接的池,这些连接由sql 包来维护,sql 包会

    2024年02月03日
    浏览(86)
  • 【Golang】Golang进阶系列教程--Go 语言数组和切片的区别

    在 Go 语言中,数组和切片看起来很像,但其实它们又有很多的不同之处,这篇文章就来说说它们到底有哪些不同。 数组和切片是两个常用的数据结构。它们都可以用于存储一组相同类型的元素,但在底层实现和使用方式上存在一些重要的区别。 Go 中数组的长度是不可改变的

    2024年02月15日
    浏览(57)
  • 【Golang】Golang进阶系列教程--Go 语言切片是如何扩容的?

    在 Go 语言中,有一个很常用的数据结构,那就是切片(Slice)。 切片是一个拥有相同类型元素的可变长度的序列,它是基于数组类型做的一层封装。它非常灵活,支持自动扩容。 切片是一种引用类型,它有三个属性:指针,长度和容量。 底层源码定义如下: 指针: 指向

    2024年02月14日
    浏览(63)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包