day08 Go中的面向对象

news/2024/7/4 18:24:52/文章来源:https://www.cnblogs.com/dengz/p/18279120

go 面向对象继承

  • Go语言的继承:结构体的嵌套
package mainimport "fmt"// 父类结构体
type Person struct {name stringage  int
}// 子类结构体。 Student 使用了 匿名继承。表示 Student中拥有了 Person的所有字段
type Student struct {Person // 匿名字段,实现了继承school string
}func main() {// CTO  业务功能拆分,软件架构选型。/*go 中如何实现面向对象- 封装- 继承- 多态 宏观事物*/// 继承:父类通用,子类具体。 go语言中就是:结构体的嵌套// 定义 父类p1 := Person{name: "zhangsna", age: 19}fmt.Println(p1)// 定义 子类s1 := Student{Person: Person{"lisi",30,}, school: "清华"}fmt.Println(s1)// 定义子类var s2 Students2.Person.name = "王五"s2.Person.age = 32s2.school = "北大"fmt.Println(s2)// 定义子类// 提升结构体字段:只有使用 `匿名字段` 才可以使用。即:Person在Student是一个匿名字段,Person中的name,age属性能直接被点出来var s3 Students3.name = "赵六" // 提升字段,直接使用Person结构体中的names3.age = 23    // 提升字段,直接使用Person结构体中的ages3.school = "科技大学"fmt.Println(s3)}

go 面向对象中的方法

  • 结构体能够调用该方法 , 也是面向对象中的方法
package mainimport "fmt"type Dog struct {name stringage  int
}// 定义 一个带结构体参数的函数方法。即:结构体能够调用该方法 , 也是面向对象中的方法
func (dog Dog) eat() {fmt.Println("Dog has func eat ")
}// 对象属性
type Cat struct {name stringage  int
}// 对象方法
func (cat Cat) eat() {fmt.Println("Cat has func eat ")
}
func (cat Cat) sleep() {fmt.Println("Cat has func sleep ")
}
func main() {/* go 语言中 面向对象的中的方法. 模拟成一个类 */dog := Dog{"金毛狗🐶", 30}dog.eat()cat := Cat{"布偶猫🐱", 21}cat.eat()cat.sleep()}

go 面向对象中的方法。【高阶使用】方法继承/重写

package mainimport "fmt"// 定义 父类
type Animal struct {name stringage  int
}// 定义父类的通用方法
func (a Animal) sleep() {fmt.Println(a.name, "正在睡觉。。。")
}
func (a Animal) eat() {fmt.Println(a.name, "正在吃饭。。。")}// 定义 Dog1 子类,并继承 Animal
type Dog1 struct {Animal
}
type Dog2 struct {Animalcolor string
}// 定义子类自己的方法
func (dog Dog1) bite() {fmt.Println(dog.name, "正在咬人。。。")}// 定义 Cat1 子类,并继承 Animal
type Cat1 struct {Animalcolor string // 定义子类自己的属性
}// Cat1 重写 父类的方法
func (cat Cat1) eat() {fmt.Println("Cat1 重写 父类的 eat 方法:", cat.name, "正在吃猫粮")
}func main() {golden_retriever := Dog1{Animal{name: "小金毛", age: 3}}ragdoll := Cat1{Animal: Animal{name: "布偶", age: 3}, color: "奶白色"}// 1. 子类使用父类的方法golden_retriever.eat()golden_retriever.sleep()// 2. 子类使用自己的方法fmt.Println("子类使用自己的方法:")golden_retriever.bite()// 3. 子类使用父类的属性fmt.Println("子类使用父类的属性:", ragdoll.name, ragdoll.age)// 4. 子类使用子类的属性fmt.Println("子类使用子类的属性:", ragdoll.color)}

go 面向对象中的多态

  • go 中的多态,需要 go 的interface 接口来实现
package mainimport "fmt"// AnimalInterface 定义接口
type AnimalInterface interface {eat()sleep()
}type DogInterfaceStruct struct {name string
}
type CatInterfaceStruct struct {name string
}func (d DogInterfaceStruct) eat() {fmt.Println("多态狗狗🐶:", d.name, "正在吃")
}
func (d DogInterfaceStruct) sleep() {fmt.Println("多态狗狗🐶:", d.name, "正在睡觉")}func (c CatInterfaceStruct) eat() {fmt.Println("多态骚猫🐱:", c.name, "正在吃")}
func (c CatInterfaceStruct) sleep() {fmt.Println("多态骚猫🐱:", c.name, "正在睡觉")}func realizePolymorphism(animal AnimalInterface) {animal.eat()animal.eat()
}func main() {/*模糊类(结构体)/ 具体类(结构体)*/// go 中的多态。需要 go 中的interface 接口来实现// 多态:一个事物有多种形态cat := CatInterfaceStruct{name: "布偶猫"}cat.eat()cat.sleep()dog := DogInterfaceStruct{name: "小鸡毛"}dog.eat()dog.sleep()fmt.Println("------")// 定义一个类型 可以为 接口类型的变量,实际上所有实现类都可以赋值给这个对象。var animal AnimalInterfaceanimal = dogrealizePolymorphism(animal)// 总结:接口的实现 都拥有 多态特性,除了自己本身还是它对应的接口类型}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/736101.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Maven 笔记

开发工具:Maven相关内容笔记# Maven简介 Maven的本质是一个项目管理工具,将项目开发和管理过程抽象成一个项目对象模型(POM)) 这玩意儿是使用Java开发的,所以采用的就是Java的思想:面向对象 POM (Project Object Model):项目对象模型Maven的作用:项目构建:提供标准的、…

202406月度小结

这个学期比上个学期有意思得多了。但是为什么我只写了6月小结,没有写3月4月5月小结呢?因为那时候还没有想到用博客写这种小结形式的随笔啦…… 横向对比,这四个月都挺有意思的。但是由于我太容易忘记事情了……我的记忆是有限的,先把6月发生的趣事赶紧记录下来比较好。 昨天…

大模型技术方向Task1笔记

赛题概要 一、赛事背景 在当今数字化时代,企业积累了丰富的对话数据,这些数据不仅是客户与企业之间交流的记录,更是隐藏着宝贵信息的宝库。在这个背景下,群聊对话分角色要素提取成为了企业营销和服务的一项重要策略。 群聊对话分角色要素提取的理念是基于企业对话数据的深度…

[LeetCode] 122. Best Time to Buy and Sell Stock II

medium是你的谎言. class Solution:def maxProfit(self, prices: List[int]) -> int:#1if len(prices) == 1:return 0#elsemax_profit = 0min_price = prices[0]for i, element in enumerate(prices):#find a min_price if element <= min_price:min_price = elementelse…

【esp32 学习笔记】esp-idf学会调用组件管理——以button

简单不看版——esp-idf组件管理步骤 在ESP-IDF 组件管理器网页(https://components.espressif.com/)搜索我们需要的组件,比如【button】,然后 点开相应的组件,比如 espressif/button 组件。 【关键步骤】复制相关组件界面上配置组件的命令 ,形如:idf.py add-dependency &…

idea创建javaweb项目

1.新建project项目 2.添加依赖<dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>6.0.10</version> </dependency>…

Linguistics-English-Would, Should, and Could: How to Use Them Correctly

https://7esl.com/would-should-could/ Key Takeaways“Would” is used for hypotheticals and future possibilities that may not occur. “Should” implies advice, expectation, or probability. “Could” expresses past ability or present possibility.Home Knowled…

[LeetCode] 121. Best Time to Buy and Sell Stock

想清楚了确实算是简单题. class Solution:def maxProfit(self, prices: List[int]) -> int:#1if len(prices) == 1:return 0#elsemax_profit = 0min_price = prices[0]for i, element in enumerate(prices):if element <= min_price:min_price = elementelif element - m…

Druid数据库加密实现

Druid数据库连接池中的密码加密功能提供了以下几个主要好处: 增强安全性:最显著的好处是提高了数据库系统的安全性。明文存储数据库密码容易造成安全隐患,一旦配置文件泄露,数据库可能遭受未授权访问。通过加密数据库密码,即使配置文件落入未经授权的人员手中,他们也无法…

17-移动端适配

移动端适配01 单位的分类02 相对单位相对的对象 2.1 em 永远都是相对于自身的font-size <!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, …

maven下载安装配置

Maven 是一款为 Java 项目管理构建、依赖管理的工具(软件),使用 Maven 可以自动化构建、测试、打包和发布项目,大大提高了开发效率和质量。 Maven的两大核心作用: 1.依赖管理: Maven 可以管理项目的依赖,包括自动下载所需依赖库、自动下载依赖需要的依赖并且保证版本没有…

回溯

理论基础 什么是回溯法回溯法也可以叫做回溯搜索法,它是一种搜索的方式。 在二叉树系列中,我们已经不止一次,提到了回溯,例如二叉树:以为使用了递归,其实还隐藏着回溯 (opens new window)。 回溯是递归的副产品,只要有递归就会有回溯。 所以以下讲解中,回溯函数也就是递…

day02 go的数据类型和运算符

day02 go的数据类型和运算符 前言动态语言类型 自动开辟数据空间,自动识别数据类型 python 静态语言类型 开辟内存空间,定义数据类型 c,java,gogo 语言中的数据类型 /*- go 基本数据类型:- 布尔类型- 数值类型- 整型 :- 有符号:int,int8,int16,int32,int64.- 无符号:ui…

16-视口的理解

视口的理解01 布局视口和视觉视口02 理想视口<meta name="viewport" content="width=device-width, initial-scale=1.0"> 通过width=device-width 即布局视口的宽度等于设备的宽度,以此来达到效果视口中的其它值

《痞子衡嵌入式半月刊》 第 103 期

痞子衡嵌入式半月刊: 第 103 期这里分享嵌入式领域有用有趣的项目/工具以及一些热点新闻,农历年分二十四节气,希望在每个交节之日准时发布一期。 本期刊是开源项目(GitHub: JayHeng/pzh-mcu-bi-weekly),欢迎提交 issue,投稿或推荐你知道的嵌入式那些事儿。 上期回顾 :《…

EasyDesktop 浏览器书签管理从未如此简单

作为一名软件开发从业人员, 每天80%的时间都在与浏览器打交道, 一半的时间在用浏览器开发调试, 另一半时间则是在互联网上搜寻各种知识和资源. 为此, 我的浏览器书签栏存储和很多非常棒的链接, 多到2k屏幕分辨率下一栏都放不下, 为此我只好把这些书签的名称改的短一点, 这样就能…

docker基本介绍

虚拟机的部署形式 一个物理机可以部署多个app 每个app独立运行在一个VM虚拟机里面 依然部署很慢 迁移和扩展可以使用VM的克隆 每一个虚拟机都是一个完整的操作系统,虚拟机多的时候,操作系统本身资源也就被消耗过多 企业使用的虚拟化工具为:vmware esxi虚拟化工具 个人学习使…

新生题

MISC kongfu 用winhex打开压缩包,下拉到最后发现keybase64解密后发现是栅栏密码audio 打开发现是一个wav文件,用Audacity打开根据电平,得到01100010 01100001 01101011 01100100 01101111 01110010 二进制转字符进行md5加密Smtpbase64解码foremost 用foremost分解图片分解成…

STM32串口如何输出中文

当你想在串口调试助手实现换行功能时却不行时,试一试将\n改为\r\n 因为我用的是XCOM串口调试助手,就遇到了这样的问题 而当你加入int fputc(int ch, FILE *f)函数却实现不了printf,putchar调用时 需要加入#include<stdio.h>并勾选魔术棒中的Use MicroLIBint fputc(int…

DApp设计与开发 课程笔记(四):NFT交易市场合约

笔记对应课程内容为成都信息工程大学区块链产业学院老师梁培利的DApp 设计与开发 10-13 课 笔记中提到的名词不做过多解释 不懂就搜!开发准备:编辑IDE环境:Vscode+Hardhat 调试:Remix ERC标准智能合约生成巫师:https://docs.openzeppelin.com/contracts/5.x/wizard动手学 …