go语言面向对象之方法

1、实现方法

package main

import "fmt"

//在面向对象编程中,一个对象其实就是一个简单的值或者一个变量,在这个
//对象中包含一些函数
//这种带有接受者的函数,我们称之为方法,本质上,一个方法
//则是一个和特殊类型关联的函数

//定义一个方法,实现两个数相加

type myint int

//传统的定义方式,面向过程的方式定义函数
func Add(a,b myint) myint{
	return a + b
}

//面向对象的方式定义方法,这个意思是AddOOP这个方法是属于a这个类型的。方法和函数的不同就是方法有一个接受者,这里的接受者就是a这个类型

//这里必须要是自定义类型,比如这里就不能使用int,可以是指针类型和非指针类型

//可以为基础类型添加方法,也可以为结构体类型添加方法,下面的例子就是为基础类型添加方法
func (a myint)AddOOP(b myint) myint{
	return a + b
}

//为结构体添加类型
type Person struct {
	name string
	age int
	sex byte
}

func (p Person )PrintInfo()  {
	fmt.Println(p.name,p.age,p.sex)
}

func main() {
	var a myint = 1
	var b myint = 1

	//调用函数
	fmt.Println(Add(a,b))
	//2

	//调用基础类型的方法
	fmt.Println(a.AddOOP(b))
	//2

	//调用结构体的方法
	c := Person{name:"test",age:12,sex:‘m‘}
	c.PrintInfo()
	//test 12 109

}

  

2、指针类型和非指针类型

package main

import "fmt"

type Person1 struct {
	name string
	age int
	sex byte
}

//这种指针类型作为接受者,引用语意
func (p *Person1) PrintPointer()  {
	(*p).name = "test1"
	p.age = 13
	(*p).sex = ‘f‘

}

func (p Person1) PrintValue()  {
	p.name = "test2"
	p.age = 14
	p.sex = ‘m‘

}

func main() {
	p1 := Person1{name:"abc",age:12,sex:‘a‘}

	fmt.Println("调用方法前--->",p1)
	//调用方法前---> {abc 12 97}
	(&p1).PrintPointer()
	fmt.Println("调用方法后--->",p1)
	//调用方法后---> {test1 13 102}

	p2 := Person1{name:"abcd",age:10,sex:‘c‘}

	fmt.Println("调用方法前--->",p2)
	//调用方法前---> {abcd 10 99}

	p2.PrintValue()
	fmt.Println("调用方法后--->",p2)
	//调用方法后---> {abcd 10 99}

}

  

3、实现继承和重写

package main

//go语言的继承
import "fmt"

type Person2 struct {
	name string
	age int
	sex byte
}

func (p *Person2) PrintValue2()  {
	fmt.Printf("%s,%c,%d\n",p.name,p.sex,p.age)

}

//写一个子类,继承Person父类
type Student31 struct {
	Person2
	id int
	addr string

}

//为Student31这个结构体定义方法,如果父类有一个相同的方法,则相当于重写父类的方法
func (p *Student31) PrintValue3()  {
	fmt.Printf("%s,%c,%d\n",p.name,p.sex,p.age)
	fmt.Printf("%d,%s\n",p.id,p.addr)
}

func main() {
	p1 := Person2{name:"abc",age:12,sex:‘a‘}

	//父类调用父类的方法
	(&p1).PrintValue2()
	//abc,a,12

	p2 := Student31{Person2:Person2{"ddd",12,‘f‘},id:10,addr:"dddddddddd"}
	//子类调用父类的方法
	(&p2).PrintValue2()
	//ddd,f,12

	//子类调用重写的方法
	(&p2).PrintValue3()
	//ddd,f,12
	//10,dddddddddd

	//如果子类和父类有相同的方法,如果一定要调用父类的方法,则用下面的方式来调用
	//p2.Person2.PrintValue2()
}

  

4、调用方法的三种方法

package main

import "fmt"

type Person3 struct {
	name string
	age int
	sex byte
}

func (p *Person3)Test1()  {
	//%p表示地址,%v表示值
	fmt.Printf("%p,%v",p,p)
}

func main() {
	p1 := Person3{name:"abc",age:12,sex:‘a‘}

	//传统的调用方法
	(&p1).Test1()
	//0x1f4400d0,&{abc 12 97

	//使用go的方法值特性调用方法,也就是说用对象去调用方法
	pFunc := p1.Test1

	pFunc()
	//0x1f43e0d0,&{abc 12 97}

	//使用方法表达式调用方法,用类的的指针去调用
	pFunc2 := (*Person3).Test1

	pFunc2(&p1)
	//0x1f43e0d0,&{abc 12 97}

}

  

5、定义setter和getter方法

package main

import "fmt"

type Dog struct {
	name string
	age int
	sex byte
}

//封装dog的方法

//setter
func (p *Dog)setName(name string)  {
	p.name = name
}

//getter
func (p *Dog)getName() string {
	return p.name
}

func (p *Dog)run()  {
	fmt.Printf("runrun%s\n",p.name)
}

func main() {
	d1 := Dog{name:"abc",age:12,sex:‘a‘}

	d1.setName("dooooo")

	d1.getName()

	d1.run()
	}

  

原文地址:https://www.cnblogs.com/bainianminguo/p/10878855.html

时间: 2025-01-17 21:12:06

go语言面向对象之方法的相关文章

区块链技术语言(二十三)——Go语言面向对象:方法

封装是面向对象三大特性之一.封装的好处,一个是增加代码内聚性,就是将数据和对数据的操作封装在一起,提高可复用性和可维护性:还有就是信息隐藏,就是把不该暴露的信息藏起来,通过访问控制来隐藏数据,不被外界干扰.也就是说,一个对象就是一个封装了数据和操作这些数据的代码的逻辑实体.Go语言没有封装这个名词,但它通过方法实现了封装的特性. 一.Go语言方法 方法,本质上是一个函数.与普通函数的格式有一点不同,它在关键字 func 和方法名中间加入了一个特殊的接收器类型.其格式如下: 注: a. 接收者t的

C语言之----面向对象的方法实现链表的操作

1 /* 2 * 详细运行过程: 本程序实现的是对链表的简单的操作,即链表的增 删 改 查 销毁 初始化 3 * 运用面向对象的思想,实现一个类op,op中包括了所有的链表操作方法 4 * 其他的程序调用op类,实现对表链表的操作 5 * 链表包括 6 * 面向对象,简单易学程序更加紧凑,更加健壮,更安全 7 */ 8 #include<string.h> 9 #include<stdlib.h> 10 #include<stdio.h> 11 12 #define o

结构化开发方法和面向对象开发方法的比较

1. 两者基本思想的比较 1.1结构化方法的基本思想 结构化方法是一种传统的软件开发方法,它是由结构化分析.结构化设计和结构化程序设计三部分有机组合而成的.结构化设计方法是以自顶向下,逐步求精,模块化为基点,以模块化,抽象,逐层分解求精,信息隐蔽化局部化和保持模块独立为准则的设计软件的数据架构和模块架构的方法学.它的要点是是把一个复杂问题的求解过程分阶段进行,而且这种分解是自顶向下,逐层分解,使得每个阶段处理的问题都控制在人们容易理解和处理的范围内. 结构化方法的基本思想主要体现在三个方面. (

结构化系统开发和面向对象开发方法

结构化系统开发方法: 系统分析员.软件工程师.程序员以及最终用户按照用户至上的原则,自顶向下分析与设计和自底向上逐步实施的建立计算机信息系统的一个过程,是组织.管理和控制信息系统开发过程的一种基本框架. 三部分:管理策略部分:强调系统开发的规划.进程安排.评估.监控和反馈.开发策略部分:任务分解结构:WBS优先级结构.开发经验.开发标准. 开发过程分为:系统规划阶段.系统分析阶段.系统设计阶段.系统实施阶段.系统运行与维护阶段结构化开发早期的程序开发,如C语言,都是用结构化开发方法. 面向对象开

面向过程分析方法与面向对象分析方法的区别

一.结构化分析(面向过程)方法 结构化分析方法(Structured Method,结构化方法)是面向过程的程序设计的方法,是强调开发方法的结构合理性以及所开发软件的结构合理性的软件开发方法.结构是指系统内各个组成要素之间的相互联系.相互作用的框架.结构化开发方法提出了一组提高软件结构合理性的准则,如分解与抽象.模块独立性.信息隐蔽等.针对软件生存周期各个不同的阶段,它有结构化分析(SA).结构化设计(SD)和结构化程序设计(SP)等方法. 结构化分析方法给出一组帮助系统分析人员产生功能规约的原

公司服务器坏了,无聊按面向对象的方法分析下javascript的空值和假值

首先要知道javascript的自动转换,就是该处需要什么类型,那么javascript会自动把目前类型传入该需要类型的构造函数,来生成需要类型猜想1:undefined在javascript里是一个类估计(不继承object),null是object对象的一个子类,用面向对象的方法看待的话是这样只有0和空字符串等于false:undefined和null对象并不等于false对象,而null和undefined是相等的 这个怎么理解呢?       猜想2: 在你使用undefined对象和其

结构化开发方法v.s.面向对象开发方法

关于结构化和面向对象的程序设计方法的概念对比的讨论已经不是一个很新颖的话题,然而对于刚开始接触了解软件工程开发的新手,了解学习其不同的开发特点,参与其利弊的讨论,对于新的更好的编程范式的产生具有积极意义.而在在本文中,我们从该面向对象的程序和结构化程序的特征讨论区分. 结构化编程 Structured programming can be viewed as the pulling together, or synthesization of such ideas as program modu

[转]Lua中的面向对象实现方法

面向对象不是针对某一门语言,而是一种思想,在面向过程的语言也可以使用面向对象的思想来进行编程.在Lua中,并没有面向对象的概念存在,没有类的定义和子类的定义,但同样在Lua中可以利用面向对象的思想来实现面向对象的类继承. 一.复制表的方式面向对象 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45

面向对象开发方法优点

首先来看看结构化的软件开发方法 1.结构化的软件开发方法 SASD方法,也可称为面向功能的软件开发方法或者面向数据流的软件开发方法.SASD方法是20世纪80年代使用最广泛的软件开发方法.它首先用结构化分析(Structure Analysis,SA)对软件进行需求分析,然后用结构化设计(Structure Design,SD)方法进行总体设计,最后进行结构化编程(Structure Programming,SP).这种开发方法使得开发步骤明确,SA.SD和SP相辅相成,一气呵成. 结构化开发方