[GO语言基础语法|青训营笔记]

113 阅读3分钟

随着计算机技术的发展,软件开发也越来越受到关注。编程语言的发展也带来了许多新的编码范式。在这些新的范式中,接口和多态是最重要的。而在go语言中,接口和多态互为表里,是非常重要的编程概念。

接口是一种抽象的数据类型。它定义了一组方法,但不提供实现。相当于一份声明,告诉编译器应该通过哪些函数来访问对象。在go语言中,接口可以用interface关键字定义。

多态是指同样的操作作用于不同的对象,可以有不同的结果。多态性是面向对象程序设计的核心之一。通过多态机制,程序可以在运行时动态地自适应各种具体对象类型,从而提高了代码的可维护性和可扩展性。在go语言中,多态通过接口来实现。

接下来,我们将看到一些示例,说明了go语言中接口和多态是如何互相配合的。

定义接口:

type Animal interface {
    Speak() string
}

这里我们定义了一个Animal接口,它有一个方法叫做Speak。定义接口只需要指定方法的签名,不需要实现任何函数体。

type Dog struct {
    Name string
}

现在,我们来定义一个标准的狗类(Dog),它有一个名字属性(Name)。

实现接口:

func (d Dog) Speak() string {
    return "汪汪"
}

这里我们为Dog类实现了一个Speak方法,并且这个方法与Animal接口中定义的Speak方法签名相同。这样,我们就实现了Animal接口。实现接口只需要定义具有相同方法类型的函数即可。

func (c Cat) Speak() string {
    return "喵喵"
}

同样地,我们为猫类(Cat)也实现了一个Speak方法。

使用多态:

现在我们有了一个Animal接口,并且有两个实现类Dog和Cat。接下来,我们可以在需要使用Animal对象的地方,直接传入Dog或者Cat类型的对象。

func main() {
    var animal Animal
    animal = Dog{"旺财"}
    fmt.Println(animal.Speak()) // 输出:“汪汪”

    animal = Cat{"小花"}
    fmt.Println(animal.Speak()) // 输出:“喵喵”
}

在main函数中,我们先把一个Dog对象赋值给接口类型animal,随后输出它的Speak方法。然后我们给animal赋值了另一个类型的Cat对象,同样地,输出它的Speak方法。

在我们调用animal的Speak方法时,实际上每次都调用了不同的实现方法。这就是多态带来的强大特性——使用一个接口类型的变量来表示一个具体类型的对象,通过调用相应的方法实现了对象的动态绑定。

总结:

go语言中的接口和多态是互相配合的概念,接口是一种抽象类型,定义了一组方法,不提供实现。多态性是指同样的操作作用于不同的对象,可以有不同的结果。在go语言中,接口定义了唯一的方法签名,多态通过接口实现。通过使用Go语言的接口和多态特性,可以实现高度模块性和可维护性的代码。