当前位置: 首页 > news >正文

网站制作网页设计室内设计软件3d

网站制作网页设计,室内设计软件3d,企业网站设计哪个好,网易企业邮箱登录网页版继承 有什么用 比如有两个结构体,一个男人,一个女人,但因为这两个都是人,所以有很多共同点,如果把这两个结构体完全独立的去编写,就会有很多的冗余代码块 这时候,其实只需要先构建人结构体&…

继承

有什么用

比如有两个结构体,一个男人,一个女人,但因为这两个都是人,所以有很多共同点,如果把这两个结构体完全独立的去编写,就会有很多的冗余代码块
这时候,其实只需要先构建人结构体,人结构体包含男人和女人的共同点,再构建男人和女人结构体,去继承人结构体,再独立编写本结构体所需要的特殊条件即可,这就是继承

继承可以大幅度提高代码的可维护性以及可读性

实现基本语法

在golang中,继承不是用extends等关键字,而是在子结构体中,用匿名结构体的方式去引入需要被继承的父结构体

代码:
type Human struct {
Name string
Age int
}

type Man struct {
Human
Wifename string
}

快速入门代码示例

题目:父结构体是商品(商品名,价格),子结构体是书(商品名,价格,作者),使用继承实现,并且创建一个子类实例,以安徒生童话为例子
代码:
package main

import (
“fmt”
)

type Good struct {
name string
price float64
}

func (g *Good) SetName(name string) {
g.name = name
}
func (g *Good) SetPrice(price float64) {
g.price = price
}
func (g *Good) GetName() string {
return g.name
}
func (g *Good) GetPrice() float64 {
return g.price
}

type Book struct {
Good
writer string
}

func (b *Book) SetWriter(name string) {
b.writer = name
}
func (b *Book) GetWriter() string {
return b.writer
}
func (b *Book) Show() {
fmt.Printf(“书的作者是%v,名字是%v,价格是%v”, b.GetWriter(), b.GetName(), b.GetPrice())
}
func main() {
var book = &Book{}
book.SetName(“安徒生童话”)
book.SetPrice(20.9)
book.SetWriter(“xxx”)
book.Show()
}

细节

  1. 在同一个包内,结构体可以使用嵌套匿名结构体所有的字段和方法,即:首字母大写或者小写的字段、方法,都可以使用。
  2. 在不同包中,小写不行,只能大写
  3. 匿名结构体字段访问可以简化

就比如说在快速入门案例中,用其实可以用b.name来查找书名,如果b中除了Good结构体外有name变量,就会返回这个值,如果没有,就会自动取找b所继承的父结构体里有没有name变量了,然后返回,如果都找不到,再报错

  1. 当结构体和匿名结构体有相同的字段或者方法时,编译器采用就近访问原则访问。如希望访问匿名结构体的字段和方法,可以通过匿名结构体名来区分

也就是说,如果要访问匿名结构体的属性,和子结构体属性是相互独立的,也就是说访问匿名结构体的属性并不会返回子结构体属性的值

  1. 结构体嵌入两个(或多个)匿名结构体,如两个匿名结构体有相同的字段和方法(同时结构体本身没有同名的字段和方法),在访问时,就必须明确指定匿名结构体名字,否则编译报错。

如果结构体本身有同名字段和方法,就不会报错,因为本身的优先级更高

  1. 如果一个struct嵌套了一个有名结构体,这种模式就是组合,如果是组合关系,那么在访问组合的结构体的字段或方法时,必须带上结构体的名字
    代码示例:
    package main

import (
“fmt”
)

type Good struct {
name string
price float64
}

func (g *Good) SetName(name string) {
g.name = name
}
func (g *Good) SetPrice(price float64) {
g.price = price
}
func (g *Good) GetName() string {
return g.name
}
func (g *Good) GetPrice() float64 {
return g.price
}

type Book struct {
g Good
writer string
}

func (b *Book) SetWriter(name string) {
b.writer = name
}
func (b *Book) GetWriter() string {
return b.writer
}
func (b *Book) Show() {
fmt.Printf(“书的作者是%v,名字是%v,价格是%v”, b.GetWriter(), b.==g.==GetName(), b.==g.==GetPrice())
}
func main() {
var book = &Book{}
book.==g.==SetName(“安徒生童话”)
book.==g.==SetPrice(20.9)
book.SetWriter(“xxx”)
book.Show()
}

这段代码是基于快速入门案例上的修改,修改部分用高亮符号标注,从这部分修改中不难发现,如果不是匿名结构体,则必须加上名字。因为如果不是匿名结构体,则不是继承了,而是组合,系统不会自动去找寻对应的方法和属性了。

  1. 嵌套匿名结构体后,在创建结构体变量(实例)时,可以直接指定各个匿名结构体字段的值。

跟之前的赋值方式一致
代码示例:
func main() {
var book = &Book{
g: Good{
name: “安徒生童话”,
price: 20.9,
},
writer: “xxx”,
}
book.Show()
}
还是快速入门案例的相关改编

  1. 结构体中甚至可以嵌入基本数据类型,以匿名字段的形式
    代码示例:
    type Good struct {
    name string
    price float64
    }
    type Book struct {
    Good
    int
    }

func main() {
var b Book
b.name = “安徒生童话”
b.price = 20.9
b.int = 10
fmt.Println(b)
}

不能有多个同一类型的匿名字段,如果需要多个,就只能指定名字,同类型最多保留一个匿名字段,不建议使用,还不如直接弄成一个常见的变量形式

多重继承

  1. 同名冲突解决规则​
    当嵌入的匿名结构体存在相同的字段名或者方法名时,必须通过匿名结构体类型名显式指定访问路径。
    (注:"相同的字段名或者方法名"和"匿名结构体类型名"在原文中用红色强调)
  2. ​设计建议​:为保证代码简洁性,应尽量避免使用多重继承设计。
    代码示例:
    ****type Good struct {
    name string
    price float64
    }
    type Publish struct {
    name string
    place string
    }
    type Book struct {
    Good
    Publish
    }

func main() {
var b Book = Book{
Good{
name: “安徒生童话”,
price: 20.9,
},
Publish{
name: “xxx”,
place: “yyy”,
},
}
fmt.Println(b)
}

http://www.dtcms.com/a/504944.html

相关文章:

  • 北京专业制作网站公司哪家好贵南网站建设
  • 浙江人工智能建站系统软件网站页脚写什么
  • 公司网站怎么更新需要怎么做优化关键词哪家好
  • 简单的企业网站外贸网站广告宣传网站
  • 网站建设提供商wordpress next
  • 湖州北京网站建设定制手机网站建设
  • 深圳专门做网站WordPress如何快速排名
  • 网站建设公司 lnmp建造官网
  • 丹阳建站asp 网站图标
  • 无锡网站推广哪家好网站维护工作
  • 网站设计的留言怎么做响应式网站开发pdf
  • lamp网站开发黄金组...opkg 做网站的包叫什么名字
  • Linux中I2C常见问题一
  • 龙华网站建设公司阳江网红酒店无边泳池
  • 乐学LangChain(3):多轮对话和批量对话
  • 网站服务器安全配置360网站seo怎么做
  • 网站建设和的注意事项深圳建设行业网站
  • 为了推出企业网站建设cms系统设计
  • flex:1 和 flex:auto 有什么区别?
  • 百度网盘下载太慢怎么破解
  • 晋江网站建设哪家好设计学习网站
  • 网站建设如何投放广告做网站现在可以挣钱吗
  • 兰州公司网站建设收到网站代码后怎么做
  • 自己做的网站如何赚钱建行个人余额查询网站
  • 中国建设银行重庆网站网站图片怎么换
  • 数电基础:二极管构成的门电路
  • 南京网站建设培训班对于职业规划做的好的网站
  • 双指针系列1 - 283. 移动零 和 1089. 复写零
  • 昆明做网站vr企业所得税会计分录
  • 网站建设技术免费简单网页制作成品