📜  高朗 |使用接口的多态性

📅  最后修改于: 2021-10-25 03:00:06             🧑  作者: Mango

多态这个词意味着有多种形式。或者换句话说,我们可以将多态性定义为消息以多种形式显示的能力。或者在技术术语中,多态意味着相同的方法名称(但不同的签名)用于不同的类型。例如,一个女人同时可以有不同的特征。就像母亲、妻子、姐妹、雇员等。所以同一个人在不同的情况下会有不同的行为。这称为多态性。
在 Go 语言中,我们不能借助类来实现多态,因为 Go 语言不支持类,但可以通过使用接口来实现。正如我们已经知道的那样,这些接口是在 Go 中隐式实现的。因此,当我们创建一个接口并且其他类型想要实现该接口时,这些类型在不知道类型的情况下借助接口中定义的方法使用该接口。在接口中,接口类型的变量可以包含实现该接口的任何值。这个属性有助于接口在 Go 语言中实现多态。让我们借助一个例子来讨论:

例子:

// Go program to illustrate the concept
// of polymorphism using interfaces
package main
  
import "fmt"
  
// Interface
type employee interface {
    develop() int
    name() string
}
  
// Structure 1
type team1 struct {
    totalapp_1 int
    name_1     string
}
  
// Methods of employee interface are
// implemented by the team1 structure
func (t1 team1) develop() int {
    return t1.totalapp_1
}
  
func (t1 team1) name() string {
    return t1.name_1
}
  
// Structure 2
type team2 struct {
    totalapp_2 int
    name_2     string
}
  
// Methods of employee interface are
// implemented by the team2 structure
func (t2 team2) develop() int {
    return t2.totalapp_2
}
  
func (t2 team2) name() string {
    return t2.name_2
}
  
func finaldevelop(i []employee) {
  
    totalproject := 0
    for _, ele := range i {
  
        fmt.Printf("\nProject environment = %s\n ", ele.name())
        fmt.Printf("Total number of project %d\n ", ele.develop())
        totalproject += ele.develop()
    }
    fmt.Printf("\nTotal projects completed by "+
        "the company = %d", totalproject)
}
  
// Main function
func main() {
  
    res1 := team1{totalapp_1: 20,
        name_1: "Android"}
  
    res2 := team2{totalapp_2: 35,
        name_2: "IOS"}
  
    final := []employee{res1, res2}
    finaldevelop(final)
  
}

输出:

Project environment = Android
 Total number of project 20
 
Project environment = IOS
 Total number of project 35
 
Total projects completed by the company = 55

说明:在上面的例子中,我们有一个接口名称作为员工。该接口包含两个方法,即develop()name()方法,这里develop()方法返回项目总数, name()方法返回开发环境的名称。

现在我们有两种结构,即TEAM1TEAM2。这两个结构都包含两两字段,即totalapp_1 intname_1 字符串totalapp_2 intname_2 字符串 。现在,这些结构(即,TEAM1TEAM2)正在执行的雇员接口的方法。

之后,我们创建一个名为finaldevelop()的函数,它返回公司开发的项目总数。它接受员工接口的切片作为参数,并通过迭代切片并对其每个元素调用develop()方法来计算公司开发的项目总数。它还通过调用name()方法来显示项目的环境。根据员工接口的具体类型,会调用不同的develop()name()方法。因此,我们在finaldevelop()函数实现了多态性。

如果您在此程序中添加另一个实现员工界面的团队,则此finaldevelop()函数将计算公司开发的项目总数,而不会因多态而发生任何变化。