Go:面向"对象"
一、封装
- 封装的实现步骤:
- 将结构体、字段的首字母小写(不能被导出);
- 给结构体所在的包提供一个工厂模式的函数,首字母大写。类似一个构造函数;
- 提供一个首字母大写的方法,由于获取结构体属性的值。
二、继承
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:面向"对象"的更多相关文章
- 变量-数据类型-对象-如何编写python脚本
标识符的命名规则变量是标识符的例子. 标识符 是用来标识 某样东西 的名字.在命名标识符的时候,你要遵循这些规则:标识符的第一个字符必须是字母表中的字母(大写或小写)或者一个下划线(‘ _ ’).标识 ...
- .NET面试题集锦②(Part 二)
一.前言部分 文中的问题及答案多收集整理自网络,不保证100%准确,还望斟酌采纳. 1.实现产生一个int数组,长度为100,并向其中随机插入1-100,并且不能重复. ]; ArrayList my ...
- 架构之路(九)Session Per Request
前面的两篇反应很差:没评论没赞.很伤心啊,为什么呢?搞得我好长一段时间都没更新了——呵呵,好吧,我承认,这只是我的借口.不过,还是希望大家多给反馈.没有反馈,我就只能猜了:前面两篇是不是写得太“粗”了 ...
- 新作《ASP.NET Web API 2框架揭秘》正式出版
我觉得大部分人都是“眼球动物“,他们关注的往往都是目光所及的东西.对于很多软件从业者来说,他们对看得见(具有UI界面)的应用抱有极大的热忱,但是对背后支撑整个应用的服务却显得较为冷漠.如果我们将整个“ ...
- Hibernate学习笔记5
hql语句的查询(hibernate query language) hql和sql语句的区别sql:语言关系型数据库里面的通用查询,结构化查询语言,查看的是表以及表的列hql是hibernate中独 ...
- 在PHP中使用Mysqli操作数据库
PHP的 mysqli 扩展提供了其先行版本的所有功能,此外,由于 MySQL 已经是一个 具有完整特性的数据库服务器 , 这为PHP 又添加了一些新特性 . 而 mysqli 恰恰也支持了 这些新特 ...
- ASP.NET Web API 2框架揭秘
ASP.NET Web API 2框架揭秘(.NET领域再现力作顶级专家精讲微软全新轻量级通信平台) 蒋金楠 著 ISBN 978-7-121-23536-8 2014年7月出版 定价:108.0 ...
- JAVA Day6
1.对象:用来描述客观事物的一个实体,由一组属性和方法组成 2.属性--对象具有的各种特征 *每个对象的每个属性都拥有特定值 *例如:张浩和李明的年龄.姓名不一样 3.方法--对象执行的操 ...
- 《JavaScript面向对象编程指南》译者序
相对于Perl.Python等动态脚本语言来说,JavaScript确实是一门饱受误解的语言.对于译者这种从20世纪90年代末走过来的C++程序员来说,尤其如此.在那个年代,提起JavaScript总 ...
随机推荐
- 题解报告:hdu 1176 免费馅饼(递推dp)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1176 Problem Description 都说天上不会掉馅饼,但有一天gameboy正走在回家的小 ...
- magento 自建插件通道服务
首先建立如下的目录结构 在channel.xml中如此写上 <channel> <name>local</name> <uri>http://local ...
- Oracle10g的imp命令
Oracle10g使用imp命令导出数据为dmp:imp system/password@orcl file=rd_online_20181102.dmp fromuser=user1 touser= ...
- 419 Battleships in a Board 甲板上的战舰
给定一个二维的甲板, 请计算其中有多少艘战舰. 战舰用 'X'表示,空位用 '.'表示. 你需要遵守以下规则: 给你一个有效的甲板,仅由战舰或者空位组成. 战舰只能水平或者垂直放置.换句话 ...
- APP多渠道打包
多渠道打包的概念: 打包是指使用证书文件对app签名生成一个apk文件. 多渠道打包指的就是我们的app在开发完成之后需要投放到不同的市场,比如说Google市场.百度市场等,为了统计应用在各个市场的 ...
- ssm(Spring、Springmvc、Mybatis)实战之淘淘商城-第四天(非原创)
文章大纲 一.课程介绍二.今日内容介绍三.参考资料下载四.参考文章 一.课程介绍 一共14天课程(1)第一天:电商行业的背景.淘淘商城的介绍.搭建项目工程.Svn的使用.(2)第二天:框架的整合.后台 ...
- jdk线程池,使用手记
Executors----------------------------------------------Executors------------------------------------ ...
- MYSQL 查询方法 统计查询 链接查询 子查询
mysql表格查询方法: 查询: 1.简单查询 select * from Info --查所有数据select Code,Name from Info --查指定列的数据select Code as ...
- 第三方知乎专栏应用Android源码
这是一个国内开发者白瓦力贡献的一个简约的第三方知乎客户端,也许完整度不太高,但感觉还是相当不错的,其实我也是一个知乎迷,尽管平时围观的比较多. 我相信很多搞安卓开发的童鞋也去过知乎解惑吧.引用作者的描 ...
- OpenCV3.3安装教程
http://blog.csdn.net/amusi1994/article/details/76768775?locationNum=10&fps=1