go语言method有没有继承顺序,实例探讨

Python036

go语言method有没有继承顺序,实例探讨,第1张

计算机编程语言,尤其是面向对象的编程语言,虽然语法不同,但其原理大都是相通的!那么go语言的method方法的继承是否也有像python一样的顺序继承的机制呢?我们来用一个简单的实例探讨一下。

因此,结论是go语言结构体(类)的继承并没有像python那样的顺序机制。

go语言method方法的继承、重写,继承顺序的探讨 - 大器编程

golang方法(method)返回值提取结构体(struct)取不到地址的原因是,①返回值并没有保存到变量中,返回值本身只是临时保存在程序运行的堆栈的某个不确定位置,不能取地址;②实参取地址用的操作符是是&,而形参声明变量类型为指针,需要地址值用的才是*;③声明形参为指针的参数的实参只能为地址值。

故先把修改后的代码列出,修改要点是把“*NewPerson1().Speak()”改为“var b=NewPerson1()(&b).Speak()”,同时把“NewPerson2().Speak()”改成“var a=NewPerson2()(&a).Speak()”,代码列出如下:

package main

import "fmt"

type PersonA struct{

 name string

}

func (p *PersonA) Speak () {

 fmt.Println ( "person speak" ,p.name)

}

func (p PersonA) Walk ( ){

 fmt . Println ( "person walk",p.name)}

func NewPerson1()(p PersonA){

 return PersonA{"new Person1"}}

func NewPerson2()(p PersonA){

 return PersonA{"new Person2"}}

func main () {

 var a=NewPerson2 ()(&a).Speak () 

a .Walk ()

 fmt. Println ("--------------------") 

var b=NewPerson1 ()(&b).Speak ()

 b.Walk ()}

go代码调试效果

关于指针变量的使用这一点go语言和其他有指针的程序语言如c语言是一样的,从来只有返回值为地址/指针,而从没有在赋值前给返回值取地址这种运算,类似的错误晚点再整理。

不一样的是,go语言更简单go语言函数可以使用结构体或者结构体的指针(pointer)以传递结构体参数,而且和c语言不一样的是,go语言没有区分结构体指针和结构体访问成员的运算符,go语言只有“.”适用于两种情况,而没有c语言为结构体指针专门准备的“->”运算符。

可以使用结构体指针,作为结构体的方法的参数以指代自身吗,