go语言之面向对象一
在Go语言中, 你可以给任意类型(包括内置类型,但不包括指针类型)添加相应的办法。示例如下:
type Integer int
func (a Integer) Less(b Integer) bool{
return a < b
func main(){
var a Integer=1
if a.Less(2){
fmt.Println(a,"less than 2")
}
}
在代码中,我们为内置的int类型增加了一个新方法Less()。这样实现了后,就可以让整型像一个普通的类一样使用。对应的面向过程的方法如下:
func Integer_Less(a Integer, b Integer) bool {
return a<b
}
那么当我们需要修改对象的值的时候,就需要用到指针引用。调用如下:
func (a *Integer) Add(b Integer){
*a+=b
}
如果不传入指针,那么得到的值和传入的时候是一样的,这一点Go和C语言一样,类型都是基于值传递的。要想修改变量的值,只能传递指针。
既然类型都可以有自己的办法,那么对于结构体来说也一样可以拥有自己的方法。示例如下:
type Rect struct{
x,y float32
width,height float64
}
func (r Rect) Area() float64{
return r.width*r.height
}
func main(){
var r Rect
r.height=3
r.width=4
fmt.Println("the area is:",r.Area())
}
既然是面向对象,那么是否可以继承呢。答案是肯定的,Go里面也可以使用继承。但是和C++以及Java的方法不一样,采用了继承的方法。一般称为匿名组合。
type string1 struct{
first string
}
type string2 struct{
string1
second string
}
这个string1在string2的位置是灵活可变的,可以放在second的后面也可以放在前面。Go语言很清晰的告诉你类的内存布局是怎样的。此外,在Go语言中还可以随心所欲的修改内存布局。下面的代码定义了一个Base类并且实现了Foo和Bar两个方法。然后定义了一个Foo类,该类从Base类继承并改写了Bar方法。如果没有改写的话,那么相应的方法就被继承。例如foo.Foo就和foo.Base.Foo调用是一致的
type Base struct{
Name string
}
func(base *Base) Foo(){
}
func(base *Base) Bar(){
}
type Foo struct{
Base
}
func(foo *Foo) Bar(){
/*修改Bar实现*/
}
在c++和java中,对于继承都有很多关键字,比如private,public,protected. Go语言对关键字的增加非常谨慎。要是某个符号对其他包可见,需要将符号定义为以大写字母开头,否则无法访问。
package cal
type Garden struct{
x,y float32
}
func main(){
var g cal.Garden
g.x=1
}
在cal包内申明了Garden,并且有x和y两个变量。在引用的时候会提示如下错误:
src\test.go:62:3: g.x undefined (cannot refer to unexported field or method x)
提示找不到x。如果改成下面的形式则可以通过g.X=1来访问
type Garden struct{
X,Y float32
}
go语言之面向对象一的更多相关文章
- [java学习笔记]java语言核心----面向对象之this关键字
一.this关键字 体现:当成员变量和函数的局部变量重名时,可以使用this关键字来区别:在构造函数中调用其它构造函数 原理: 代表的是当前对象. this就是所在函数 ...
- 第二十五节:Java语言基础-面向对象基础
面向对象 面向过程的代表主要是C语言,面向对象是相对面向过程而言,Java是面向对象的编程语言,面向过程是通过函数体现,面向过程主要是功能行为. 而对于面向对象而言,将功能封装到对象,所以面向对象是基 ...
- 如何使用C语言的面向对象
我们都知道,C++才是面向对象的语言,但是C语言是否能使用面向对象的功能? (1)继承性 typedef struct _parent { int data_parent; }Parent; type ...
- 比较分析C++、Java、Python、R语言的面向对象特征,这些特征如何实现的?有什么相同点?
一门课的课后题答案,在这里备份一下: 面向对象程序设计语言 – 比较分析C++.Java.Python.R语言的面向对象特征,这些特征如何实现的?有什么相同点? C++ 语言的面向对象特征: 对象模 ...
- 用C语言实现面向对象的开发
C语言的对象化模型 面向对象的特征主要包括: .封装,隐藏内部实现 .继承,复用现有代码 .多态,改写对象行为 采用C语言实现的关键是如何运用C语言本身的特性来实现上述面向对象的特征. 1.1 封装 ...
- 基于C语言的面向对象编程
嵌入式软件开发中,虽然很多的开发工具已经支持C++的开发,但是因为有时考虑运行效率和编程习惯,还是有很多人喜欢用C来开发嵌入式软件.Miro Samek说:"我在开发现场发现,很多嵌入式软件 ...
- 已看1.熟练的使用Java语言进行面向对象程序设计,有良好的编程习惯,熟悉常用的Java API,包括集合框架、多线程(并发编程)、I/O(NIO)、Socket、JDBC、XML、反射等。[泛型]\
1.熟练的使用Java语言进行面向对象程序设计,有良好的编程习惯,熟悉常用的Java API,包括集合框架.多线程(并发编程).I/O(NIO).Socket.JDBC.XML.反射等.[泛型]\1* ...
- luajit利用ffi结合C语言实现面向对象的封装库
luajit中.利用ffi能够嵌入C.眼下luajit的最新版是2.0.4,在这之前的版本号我还不清楚这个扩展库详细怎么样,只是在2.04中,真的非常爽. 既然是嵌入C代码.那么要说让lua支持 ...
- go语言之面向对象
Go 语言结构体 Go 语言中数组可以存储同一类型的数据,但在结构体中我们可以为不同项定义不同的数据类型. 结构体是由一系列具有相同类型或不同类型的数据构成的数据集合. 结构体表示一项记录,比如保存图 ...
- C 语言实现面向对象编程
转载 https://blog.csdn.net/onlyshi/article/details/81672279 C 语言实现面向对象编程1.引言面向对象编程(OOP)并不是一种特定的语言或者工具, ...
随机推荐
- Tomcat 编码不一致导致乱码
众所周知,Tomcat是一个基于HTTP协议的Java应用服务器(非Web服务器),也是一个Servlet容器. 一般我们会基于使用HTTP协议的Post或Get方法来传递内容或参数,中间会涉及一些编 ...
- 2. Spring Boot返回json数据【从零开始学Spring Boot】
在做如下操作之前,我们对之前的Hello进行简单的修改,我们新建一个包com.kfit.test.web然后新建一个类HelloControoler,然后修改App.Java类,主要是的这个类就是一个 ...
- angular controller的一些用法
最近公司的项目是es6+angular.其中的代码格式还在逐步摸索中.感谢今天同事每天帮我解惑. 今天简单梳理一下controller的一些用法 之前看书所熟知的都是 这是最普通的一种 //html ...
- VB断点调试
最近都在敲机房收费系统,这个系统是我们第一次自己在没有源代码的情况下进行的系统. 写程序的时候逻辑非常重要,可是我们还要清楚非常多时候你以为的并非你以为的! 就像在敲机房的时候,我们明明理清了逻辑.并 ...
- 使用itchat分析自己的微信(1)
1.准备工作 安装itchat pip install itchat参考 itchat内部函数 2.个人微信男女比例分析 ''' Have fun:itchat Author:杨 景 Time:201 ...
- mysql innodb_data_file_path配置增加
在配置innodb_data_file_path=ibdata1:200M:autoextend时,想增加空间,默认文件不断增加直到200M,如果要增加大小,直接修改参数增加大小会报错: auto-e ...
- mfs客户端挂载
1.安装fuse yum install fuse fuse-devel 2.加载fuse模块 modprobe fuse 3.创建mfs用户 useradd mfs -s /sbin/nologin ...
- Oracle SOA套件12c
产品概览 随着基于云的应用越来越多的被企业所採用,以及移动技术与企业应用的集成的需求的增多,企业级应用集成的复杂度也前所未有的提升. Oracle SOA套件12c,业内最完整的统一应用集成解决方式的 ...
- Lua学习十----------Lua数组
© 版权声明:本文为博主原创文章,转载请注明出处 1.LUA数组 - 一维数组 - 多维数组 2.array.lua -- 一维数组 print("一维数组") array1 = ...
- 堆排序算法的java实现
堆积排序(Heapsort)是指利用堆积树(堆)这种数据结构所设计的一种排序算法,可以利用数组的特点快速定位指定索引的元素.堆排序是不稳定的排序方法,辅助空间为O(1), 最坏时间复杂度为O ...