一、封装

  1. 封装的实现步骤:
  2. 将结构体、字段的首字母小写(不能被导出);
  3. 给结构体所在的包提供一个工厂模式的函数,首字母大写。类似一个构造函数;
  4. 提供一个首字母大写的方法,由于获取结构体属性的值。

二、继承

2.1 在 golang 中,如果一个结构体嵌套了另一个匿名结构体,那么这个结构体可以直接访问匿名结构体的字段和方法,从而实现了继承。

type Animal struct {
Name string
Age int
} type TaiDi struct {
Animal // 这就是嵌套匿名结构体Animal
} func (a *Animal) Eat() {
fmt.Printf("%s今年%d岁,它正在吃东西...", a.Name, a.Age)
} func main() {
var td TaiDi
td.Animal.Name = "泰迪"
td.Animal.Age = 1
// 可以简化成
// td.Name = "泰迪"
// td.Age = 1
td.Eat()
}

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

type B struct {
Name string
} type C struct {
Name string
A
B
} func (a *A) Eat() {
fmt.Printf("%s正在吃饭...\n", a.Name) // AA正在吃饭...
} func (b *B) Eat() {
fmt.Printf("%s正在吃饭...\n", b.Name) // 正在吃饭...
} func main() {
var c C
c.Name = "CC"
c.A.Name = "AA"
c.A.Eat()
c.B.Eat()
}

2.3 如果一个结构体嵌套了一个有名结构体,这种模式就是组合,如果是组合关系,那么在访问组合的结构体的字段或方法时,必须带上这个结构体的名字。

type A struct {
Name string
} type B struct {
a A
} func (a *A) Eat() {
fmt.Printf("%s正在吃饭...\n", a.Name) // 佩奇正在吃饭...
} func main() {
var b B
// b.Name = "佩奇" ,会报错,必须指定有名结构体的名字,如下
b.a.Name = "佩奇"
b.a.Eat()
}

2.4 嵌套匿名结构体后,也可以在创建结构体实例时,直接指定各个匿名结构体字段的值。

type Goods struct {
Name string
Price float64
} type Brand struct {
Name string
Address string
} type TV struct {
*Goods
*Brand
} func main() {
tv1 := TV{&Goods{"电视机", 99.8}, &Brand{"长虹", "四川"}}
tv2 := TV{
&Goods{
Name: "电视机",
Price: 99.8,
},
&Brand{
Name: "长虹",
Address: "四川",
}}
fmt.Println(tv1, tv2) // {0xc000004480 0xc0000044a0} {0xc0000044c0 0xc0000044e0}
fmt.Println(tv1.Goods, tv1.Brand) // &{电视机 99.8} &{长虹 四川}
fmt.Println(*tv1.Goods, *tv1.Brand) // {电视机 99.8} {长虹 四川}
}

2.5 结构体嵌套基本数据类型也是可以的

type A struct {
int
} func main() {
var a A
a.int = 100
fmt.Println(a) // {100}
}

四、多态

在学习多态之前,先学习接口

接口体现多态的两种形式:

①多态参数:在接口这一章中,使用了Usb接口案例,即可以接收手机实例,又可以接收相机实例,从而体现了 Usb 接口的多态;

②多态数组:给 Usb 数组中,存放 Phone 和 Camera 结构体的实例,Phone 还有一个特有的 Call 方法。遍历Usb数组,如果是 Phone 结构体的实例,除了调用 Usb 接口中声明的方法外,还需要调用 Call 方法。本示例在断言的最佳实践示例1中。

五、面向对象项目体验

https://files.cnblogs.com/files/believepd/familyaccount.zip

Go:面向"对象"的更多相关文章

  1. 变量-数据类型-对象-如何编写python脚本

    标识符的命名规则变量是标识符的例子. 标识符 是用来标识 某样东西 的名字.在命名标识符的时候,你要遵循这些规则:标识符的第一个字符必须是字母表中的字母(大写或小写)或者一个下划线(‘ _ ’).标识 ...

  2. .NET面试题集锦②(Part 二)

    一.前言部分 文中的问题及答案多收集整理自网络,不保证100%准确,还望斟酌采纳. 1.实现产生一个int数组,长度为100,并向其中随机插入1-100,并且不能重复. ]; ArrayList my ...

  3. 架构之路(九)Session Per Request

    前面的两篇反应很差:没评论没赞.很伤心啊,为什么呢?搞得我好长一段时间都没更新了——呵呵,好吧,我承认,这只是我的借口.不过,还是希望大家多给反馈.没有反馈,我就只能猜了:前面两篇是不是写得太“粗”了 ...

  4. 新作《ASP.NET Web API 2框架揭秘》正式出版

    我觉得大部分人都是“眼球动物“,他们关注的往往都是目光所及的东西.对于很多软件从业者来说,他们对看得见(具有UI界面)的应用抱有极大的热忱,但是对背后支撑整个应用的服务却显得较为冷漠.如果我们将整个“ ...

  5. Hibernate学习笔记5

    hql语句的查询(hibernate query language) hql和sql语句的区别sql:语言关系型数据库里面的通用查询,结构化查询语言,查看的是表以及表的列hql是hibernate中独 ...

  6. 在PHP中使用Mysqli操作数据库

    PHP的 mysqli 扩展提供了其先行版本的所有功能,此外,由于 MySQL 已经是一个 具有完整特性的数据库服务器 , 这为PHP 又添加了一些新特性 . 而 mysqli 恰恰也支持了 这些新特 ...

  7. ASP.NET Web API 2框架揭秘

    ASP.NET Web API 2框架揭秘(.NET领域再现力作顶级专家精讲微软全新轻量级通信平台) 蒋金楠 著   ISBN 978-7-121-23536-8 2014年7月出版 定价:108.0 ...

  8. JAVA Day6

    1.对象:用来描述客观事物的一个实体,由一组属性和方法组成 2.属性--对象具有的各种特征    *每个对象的每个属性都拥有特定值    *例如:张浩和李明的年龄.姓名不一样 3.方法--对象执行的操 ...

  9. 《JavaScript面向对象编程指南》译者序

    相对于Perl.Python等动态脚本语言来说,JavaScript确实是一门饱受误解的语言.对于译者这种从20世纪90年代末走过来的C++程序员来说,尤其如此.在那个年代,提起JavaScript总 ...

随机推荐

  1. [App Store Connect帮助]九、衡量 App 表现(1)分析和报告概述

    App Store Connect 提供如下分析和报告,以衡量您 App 的表现并查看向您支付的最终付款. App 分析 通过 App Store 展示次数.产品页面查看次数.销售额.App 使用次数 ...

  2. ————————C语言中快速排序方法——————————————

    在对浮点型排序是一定要用三木运算符(三目运算符内容下去自己看),因为如果也是用整形那样的减法的时候如果是两个十分相近的数字 可能返回一个小数(自己一会去试试),冉冉他cmp返回值是int(试试别的)因 ...

  3. IE6,7bug大搜集

    断断续续的在开发过程中收集了好多的bug以及其解决的办法,都在这个文章里面记录下来了!希望以后解决类似问题的时候能够快速解决 ,也希望大家能在留言里面跟进自己发现的ie6 7 8bug和解决办法! 1 ...

  4. 【数据结构(C语言版)系列一】 线性表

    最近开始看数据结构,该系列笔记简单记录总结下所学的知识,更详细的推荐博主StrayedKing的数据结构系列,笔记部分也摘抄了博主总结的比较好的内容. 一些基本概念和术语 数据是对客观事物的符号表示, ...

  5. hihoOffer收割练习20题目1

    题目1 : 无根数变有根树 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 给定一棵包含 N 个节点的无根树,小Hi想知道如果指定其中某个节点 K 为根,那么每个节点的父 ...

  6. 前缀+排序 HDOJ 4311 Meeting point-1

    题目传送门 题意:给一些坐标轴上的点,选一个点,使得其他点到该点曼哈顿距离和最小 分析:这题有很强的技巧性,直接计算每个点的曼哈顿距离和是不可行的.这里用到了前缀的思想,先对点按照x从左到右排序,p[ ...

  7. 题解报告:hdu 2544 最短路

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2544 Problem Description 在每年的校赛里,所有进入决赛的同学都会获得一件很漂亮的t ...

  8. magento 添加事件

    首先是配置文件config.xml里的配置 <checkout_cart_save_after> /*事件名字*/ <observers> <deal> /*模块名 ...

  9. TDB 12c : Transportable Database

    转 http://oracleinaction.com/12c-transportable-database/

  10. 174 Dungeon Game 地下城游戏

    一些恶魔抓住了公主(P)并将她关在了地下城的右下角.地下城是由 M x N 个房间组成的二维网格布局.我们英勇的骑士(K)最初被安置在左上角的房间里,并且必须通过地下城对抗来拯救公主.骑士具有以正整数 ...