Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oop 戈朗,打电话给父母';方法_Oop_Object_Methods_Go - Fatal编程技术网

Oop 戈朗,打电话给父母';方法

Oop 戈朗,打电话给父母';方法,oop,object,methods,go,Oop,Object,Methods,Go,从下面的示例中,子对象是否可以调用父对象的方法?例如,我希望孩子(男孩1和女孩1)调用父母的“记住”方法;所以父母可以记住孩子希望他们记住的东西 多谢各位 package main import "fmt" type child struct { Name string } func (p *child) Yell() { fmt.Println("Child's yelling") } type parent struct { Name string

从下面的示例中,子对象是否可以调用父对象的方法?例如,我希望孩子(男孩1和女孩1)调用父母的“记住”方法;所以父母可以记住孩子希望他们记住的东西

多谢各位

package main

import "fmt"

type child struct {
    Name string 
}

func (p *child) Yell() {
    fmt.Println("Child's yelling")
}

type parent struct {
    Name string 
    Children []child
    Memory []string
}

func (p *parent) Yell() {
    fmt.Println("Parent's yelling")
}

func (p *parent) Remember(line string) {
    p.Memory = append(p.Memory, line)
}

func main() {
    p := parent{}
    p.Name = "Jon"
    boy1 := child{}
    boy1.Name = "Jon's boy"
    girl1 := child{}
    girl1.Name = "Jon's girl"
    p.Children = append(p.Children, boy1)
    p.Children = append(p.Children, girl1)
    fmt.Println(p)

    p.Yell()
    for i:=0;i<len(p.Children);i++ {
        p.Children[i].Yell()
    }
}
主程序包
输入“fmt”
类型子结构{
名称字符串
}
func(p*child)Yell(){
fmt.Println(“孩子的叫喊声”)
}
类型父结构{
名称字符串
孩子
内存[]字符串
}
func(p*父项)Yell(){
fmt.Println(“父母的喊叫”)
}
func(p*父项)记住(行字符串){
p、 内存=追加(p.内存,行)
}
func main(){
p:=父{}
p、 Name=“Jon”
男孩1:=孩子{}
男孩1.Name=“乔恩的男孩”
girl1:=子{}
girl1.Name=“乔恩的女孩”
p、 Children=append(p.Children,boy1)
p、 Children=append(p.Children,girl1)
fmt.Println(p)
p、 叫喊

对于i:=0;i可以在子结构中添加指向父结构的指针

type child struct {
    Name string
    parent *parent
}

func (p *child) Yell() {
    fmt.Println("Child's yelling")
    p.parent.Remember(p.Name + " called")
    p.parent.Yell()
}

可以在子结构中添加指向父结构的指针

type child struct {
    Name string
    parent *parent
}

func (p *child) Yell() {
    fmt.Println("Child's yelling")
    p.parent.Remember(p.Name + " called")
    p.parent.Yell()
}

我只是咕噜的开胃菜

似乎Golang约定适用于类名,当继承基类(“父类”)时,不应分配变量名。
p.Parent
将自动工作,即如下所示:

type Child struct {
    *Parent   // put at top
    Name string
}

func (p *Child) Yell() {
    fmt.Println("Child's yelling")
    p.Parent.Remember(p.Name + " called")
    p.Parent.Yell()
}
参考:

  • 其他一些示例使用非指针父对象继承,如:

    type Child struct {
        Parent   // put at top
        Name string
    }
    

    还不确定哪一个更正式、更方便,但我只是Golang的新手

    似乎Golang约定适用于类名,当继承基类(“父类”)时,不应分配变量名。
    p.Parent
    将自动工作,即如下所示:

    type Child struct {
        *Parent   // put at top
        Name string
    }
    
    func (p *Child) Yell() {
        fmt.Println("Child's yelling")
        p.Parent.Remember(p.Name + " called")
        p.Parent.Yell()
    }
    
    参考:

  • 其他一些示例使用非指针父对象继承,如:

    type Child struct {
        Parent   // put at top
        Name string
    }
    

    还不知道哪一个更正式、更方便,谢谢你。但是,如何使用memory()实现这一点呢方法?我得到了一个零指针错误。@Gon:你可以调用
    记住
    的方法,就像我在这里调用
    叫喊
    一样。如果指针为零,你还没有给父对象分配指针。谢谢。但是,如何使用记住()方法?我得到了一个零指针错误。@Gon:你可以调用
    记住
    ,方法与我在这里调用
    叫喊
    完全相同。如果指针为零,你就没有给父对象分配指针。