Go语言程序演示如何在类中使用super关键字


在 Go 语言中,不存在“super”这个术语。“super”关键字用于面向对象编程语言,表示父类或被继承的类。它通常用于访问子类修改过的父类方法或属性。本文将通过不同的示例说明如何在类中使用super关键字。

方法 1:使用子结构体和父结构体

在本方法中,我们将学习如何使用子结构体和父结构体在类中使用super关键字。这里,父结构体嵌入到子结构体中。此外,子结构体包含一个PrintName函数,该函数在打印自己的名称后,使用“child.Parent.PrintName()”行调用父结构体的PrintName方法。让我们看看执行过程。

算法

  • 步骤 1 − 创建一个名为main的包,并在程序中声明fmt(格式化包),其中main生成可执行文件Example:s,fmt帮助格式化输入和输出。

  • 步骤 2 − 创建一个名为“Parent”的结构体,并赋予其一个名为“name”的字符串类型字段。

  • 步骤 3 − 在Parent结构体上创建一个名为“PrintName”的方法,接收者是指向该结构体的指针。该过程打印“name”字段的值。

  • 步骤 4 − 创建一个“Child”结构体,嵌入Parent结构体。Child结构体中还存在一个名为“age”的int类型字段。

  • 步骤 5 − 在Child结构体上创建一个名为“PrintName”的方法,接收者是指向该结构体的指针。该过程首先打印Child结构体“name”字段的值。然后使用“child.Parent.PrintName()”行调用嵌入的Parent结构体的“PrintName”函数。

  • 步骤 6 − 在“main”方法中创建一个指向Child结构体的指针,并将其字段填充为值。

  • 步骤 7 − 要使用“super”关键字,请在Child结构体指针上调用“PrintName”函数。

  • 步骤 8 − 输出将是子类和父类的名称,使用fmt.Println()函数打印到控制台,其中ln表示换行。

示例

在本示例中,我们将使用子结构体和父结构体来演示如何在Go语言的类中使用super关键字。

package main
import "fmt"

type Parent struct {
   name string   //create name in the parent struct which will be used to print the name of parent
}

func (parent *Parent) PrintName() {
   fmt.Println("Parent:", parent.name) //print parent name
}

type Child struct {
   Parent        
   age int
}

func (child *Child) PrintName() {
   fmt.Println("Child:", child.name)    //print child name
   child.Parent.PrintName() // calling the PrintName method of the parent
}

func main() {
   child := &Child{Parent: Parent{name: "vipul kukreja"}, age: 16}
   child.PrintName() //call the method PrintName for child
}

输出

Child: vipul kukreja
Parent: vipul kukreja

方法 2:使用矩形结构体和正方形结构体

在本例中,我们将了解如何使用矩形结构体和正方形结构体使用super关键字。这里,我们创建了一个名为“Shape”的接口,其中包含一个“Area”方法。该接口由“Rectangle”结构体实现,该结构体具有相同签名的函数。除了嵌入“Rectangle”类型外,“Square”结构体还具有一个“Area”函数。“sq.Rectangle.Area()”行用于从“Square”结构体的“Area”方法调用嵌入的“Rectangle”结构体的“Area”方法。让我们看看执行过程。

算法

  • 步骤 1 − 创建一个名为main的包,并在程序中声明fmt(格式化包),其中main生成可执行文件Example:s,fmt帮助格式化输入和输出。

  • 步骤 2 − 创建一个方法签名为shape()的接口Area。

  • 步骤 3 − 创建Rectangle结构体,包含两个字段——宽度和高度——以及一个用于实现接口的方法。Area(),计算矩形的面积。

  • 步骤 4 − 添加一个新的正方形结构体,在其中嵌入Rectangle。

  • 步骤 5 − 实现Square结构体的Area()方法,该方法使用Rectangle计算正方形的面积。

  • 步骤 6 − 在main方法中创建一个指向Square结构体的指针,并将其字段填充为值。

  • 步骤 7 − 调用Square结构体引用的Area()函数以调用Square结构体的Area方法并打印正方形的面积。

  • 步骤 8 − 也调用Rectangle结构体指针上的Area()函数,这将打印矩形的面积并调用Rectangle结构体的Area方法。

  • 步骤 9 − 比较这两个函数的输出将显示差异,它将使用fmt.Println()函数打印到屏幕上,其中ln表示换行。

示例

在本示例中,我们将使用矩形结构体和正方形结构体来演示如何在Go语言的类中使用super关键字。

package main
import "fmt"

type Shape interface {
   Area() float64 //create area method in the shape interface
}

type Rectangle struct {
   width, height float64 //create width and height in the rectangle struct
}

func (rect *Rectangle) Area() float64 {
   return rect.width * rect.height  //return area of rectangle
}

type Square struct {
   Rectangle
}

func (sq *Square) Area() float64 {
   return sq.Rectangle.Area() + (sq.width * 2)
}

func main() {
   sq := &Square{Rectangle{width: 10, height: 6}}
   fmt.Println("Area of Square:", sq.Area())              // calls the Square struct's Area method
   fmt.Println("Area of Rectangle:", sq.Rectangle.Area()) // calls the Rectangle struct's Area method
}

输出

Area of Square: 80
Area of Rectangle: 60

结论

我们使用两个不同的示例执行了在类中使用super关键字的程序。在第一个示例中,我们使用了子结构体和父结构体,在第二个示例中,我们使用了shape接口并使用矩形和正方形结构体实现了它。

更新于: 2023年2月20日

903 次查看

开启您的 职业生涯

通过完成课程获得认证

立即开始
广告