Skip to content

Go 继承

go
package main

import (
  "fmt"
  "strconv"
)

// 动物类
type Animal struct {
  name string
  subject string
}

// 动物的公共方法
func (a *Animal) eat(food string) {
  fmt.Println(a.name + "喜欢吃:" + food +",它属于:" + a.subject)
}

// 猫类,继承动物类
type Cat struct {
  // 继承动物的属性和方法
  Animal
  // 猫自己的属性
  age int
}

// 猫类独有的方法
func (c Cat) sleep() {
  fmt.Println(c.name + " 今年" + strconv.Itoa(c.age) + "岁了,特别喜欢睡觉")
}

func main() {
  // 创建一个动物类
  animal := Animal{name:"动物", subject:"动物科"}
  animal.eat("肉")

  // 创建一个猫类
  cat := Cat{Animal: Animal{name:"咪咪", subject:"猫科"},age:1}
  cat.eat("鱼")
  cat.sleep()
}

使用接口

go
package main

import (
"fmt"
"strconv"
)

type Animaler interface {
    eat()
}

type Animal struct {
    name string
    age int
    food string
}

// 实现 eat() 方法
func (animal Animal) eat() {
    fmt.Println(animal.name + "今年"+ strconv.Itoa(animal.age) +"岁了," + "喜欢吃" + animal.food)
}

type Cat struct {
    Animal
    time int
}

type Dog struct {
    Animal
    plays string
}

// 猫独有的方法
func (cat Cat) sleep() {
    fmt.Println("我叫" + cat.name + ", 我能睡" + strconv.Itoa(cat.time) + "分钟" )
}
// 狗独有的方法
func (dog Dog) play() {
    fmt.Println("我叫" + dog.name + "我喜欢玩" + dog.plays)
}

func testInterface(animaler Animaler)  {
    animaler.eat()
}

func main()  {
    cat := Cat{Animal:Animal{name:"咪咪", age:2, food:"鱼"}, time: 8}
    cat.sleep()
    testInterface(cat)

    dog := Dog{Animal:Animal{name:"大黄", age:2, food:"骨头"}, plays:"球球"}
    dog.play()
    testInterface(dog)
}