build-web-application-with-golang icon indicating copy to clipboard operation
build-web-application-with-golang copied to clipboard

对GO语言接口继承有些不太理解

Open jockchou opened this issue 9 years ago • 1 comments

package main

import (
    "fmt"
)

type Singer interface {
    Sing()
}

type Sayer interface {
    Say()
}

type SayerSayer interface {
    Singer
    Sayer
}

type Person struct {
    name string
}

type Student struct {
    Person
    age int
}

func (p *Person) Say() {
    fmt.Printf("%s can Say\n", p.name)
}

func (s *Student) Sing() {
    fmt.Printf("%s can Sing\n", s.name)
}

func main() {
    //var ss SayerSayer = Student{Person{"jay"}, 25} //这里报错不太理解,为什么下面不报错
    var ss SayerSayer = &Student{Person{"jay"}, 25}

        ss.Sing()
    ss.Say()
}

看了接口那一章,写了一段验证程序 注释报错那行不太理解,可以帮我讲解一下嘛!!!

我这样写Student是不是实现了上面三个接口?

jockchou avatar Sep 16 '15 10:09 jockchou

func (p *Person) Say() {} 和 func (s *Student) Sing() {} 都是对象指针的方法,不能被对象使用 func (p Person) Say() {} 这一类可以被对象指针和对象同时使用,但是它的参数是传值的

imzhangwenrong avatar Sep 16 '15 11:09 imzhangwenrong