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接口并使用矩形和正方形结构体实现了它。