MST

星途 面试题库

面试题:Go语言中接口实现多态性的基本方式

请简述在Go语言中如何通过接口来实现多态性,并给出一个简单的示例代码,示例需包含至少两个不同结构体实现同一个接口。
14.5万 热度难度
编程语言Go

知识考点

AI 面试

面试题答案

一键面试

在Go语言中,接口(interface)是一种抽象类型,通过定义一组方法签名来实现多态性。只要某个类型实现了接口中定义的所有方法,那么这个类型就实现了该接口。不同的结构体类型可以实现同一个接口,从而实现多态。

以下是一个简单示例代码:

package main

import "fmt"

// 定义一个接口
type Animal interface {
    Speak() string
}

// 定义Dog结构体并实现Animal接口
type Dog struct {
    Name string
}

func (d Dog) Speak() string {
    return fmt.Sprintf("Woof! My name is %s", d.Name)
}

// 定义Cat结构体并实现Animal接口
type Cat struct {
    Name string
}

func (c Cat) Speak() string {
    return fmt.Sprintf("Meow! My name is %s", c.Name)
}

// 定义一个函数,接受一个Animal接口类型的参数
func MakeSound(a Animal) {
    fmt.Println(a.Speak())
}

你可以使用以下方式调用:

func main() {
    dog := Dog{Name: "Buddy"}
    cat := Cat{Name: "Whiskers"}

    MakeSound(dog)
    MakeSound(cat)
}

在上述代码中:

  1. 定义了Animal接口,包含Speak方法。
  2. DogCat结构体分别实现了Animal接口的Speak方法。
  3. MakeSound函数接受一个Animal接口类型的参数,在函数中调用Speak方法。
  4. main函数中,创建了DogCat的实例,并传递给MakeSound函数,展示了多态性。当不同的结构体(DogCat)实现同一个接口(Animal)时,可以在运行时根据实际的结构体类型来调用相应的Speak方法。