go语言学习笔记19------面向对象②

1.方法

1.1基本方法创建

package main

import "fmt"

type Interger int

func (a Interger)Test(b Interger) Interger {
   return a+b
}
func main() {
 var result Interger=3
 t:=result.Test(3)
   fmt.Println(t)
}
输出结果
6

type Integer int :表示的意思是给int类型指定了一个别名叫Integer,别名可以随便起,只要符合GO语言的命名规则就可以。
指定别名后,后面可以用Integer来代替int 来使用。
func (a Integer) Test(b Integer) Integer{
}

表示定义了一个方法,方法的定义与函数的区别
第一:在关键字后面加上( a Integer), 这个在方法中称之为接收者,所谓的接受者就是接收传递过来的第一个参数,然后复制a, a的类型是Integer ,由于Integer是int的别名,所以a的类型为int
第二:在表示参数的类型时,都使用了对应的别名。
通过方法的定义,可以看出方法其实就是给某个类型绑定的函数。在该案例中,是为整型绑定的函数,只不过在给整型绑定函数(方法)时,一定要通过type来指定一个别名,因为int类型是系统已经规定好了,无法直接绑定函数,所以只能通过别名的方式。

第三:调用方式不同
var result Interger=3
表示定义一个整型变量result,并赋值为3.
result.Test( 3)
通过result变量,完成方法的调用。因为,Test( )方法,是为int类型绑定的函数,而result变量为int类型。所以可以调用Test( )方法。result变量的值会传递给Test( )方法的接受者,也就是参数a,而实参Test( 3),会传递形参b.
当然,我们也可以将Test( )方法,理解成是为int类型扩展了,追加了的方法。因为系统在int类型时,是没有改方法的。

1.1.2给结构体添加方法

package main

import (
   "fmt"
)

type person struct {
   name string
   sex byte
   age int
}

func (tmp person) printinfo() {
   fmt.Println(tmp.name,tmp.sex,tmp.age)
}

func main() {
s:=person{"abd",'m',15}
s.printinfo()
}
//输出结果
//abd 109 15

1.1.3指针变量的方法值

package main

import (
   "fmt"
)

type person struct {
   name string
   sex byte
   age int
}

func (tmp *person) printinfo() {
   fmt.Println(tmp.name,tmp.sex,tmp.age)
}

func main() {
   var s  person
//s.printinfo()
   (&s).printinfo()
}
//输出结果
//0 0

1.2方法继承

package main

import (
   "fmt"
)

type person struct {
   name string
   sex byte
   age int
}

func (tmp person) printinfo() {
   fmt.Println(tmp.name,tmp.sex,tmp.age)
}
type student struct {
   person
   id int
   addr string
}
func main() {
s:=student{person{"abd",'m',15},17,"sea"}
s.printinfo()
}
输出结果
abd 109 15

1.3方法重写

package main

import "fmt"

type animal struct {
   age int
}
func(p *animal) bark(){
   fmt.Println("wangwangjiao")
}
type Dog struct {
   animal
   name string
}
type cat struct {
   animal
   name string
}
func (c *cat)bark(){
   fmt.Println("miaomiaojiao")
}
func main() {
 var dog Dog
 dog.bark()
 var cat cat
 cat.bark()
}
//输出结果
//wangwangjiao
//miaomiaojiao

cat的方法发生改变

猜你喜欢

转载自blog.csdn.net/weixin_42927934/article/details/82320458