在Go中,当一个方法被重写时,一个与现有方法具有相同名称和接收者类型的新方法被创建并用于替代现有方法。因此,Golang可以提供多态性,允许根据接收器的类型使用同一个方法的不同实现。让我们看看例子中的执行情况。
方法1:使用形状结构
这里,这个形状结构将包含一个面积字段和一个面积方法,该方法将返回面积字段的值。矩形和方形都继承了 area () 方法。输出将是打印在控制台的面积。
算法
- 第1步 – 创建一个包main,并在程序中声明fmt(格式包)包。
-
第2步– 首先,我们创建一个Shape结构,该结构有一个浮动64类型的字段,名为area,并有一个名为Area()的方法返回该字段的值。
-
第3步– 然后将Shape结构嵌入到一个名为Rectangle的新结构中,该结构也有两个float64类型的属性,称为宽度和高度。
-
第4步– 然后,我们为矩形结构创建一个名为CalculateArea()的函数,该函数使用宽度和高度变量计算面积,并将结果分配给从Shape结构继承的面积字段。
-
第5步– “形状 “结构也被嵌入到 “方形 “结构中,”方形 “结构同样有一个float64类型的字段边。
-
第6步– 然后,使用边字段计算面积,并将结果分配给继承自Shape结构的面积字段,我们为Square结构定义CalculateArea()方法。
-
第7步– 为了计算表格的面积,我们在主函数中构建指向矩形和方形结构实例的指针,并调用它们各自的 CalculateArea() 函数。
-
第8步– 我们在矩形和正方形指针上调用Area()函数,在计算完它们的面积后获得表格的面积。
-
第9步 – 使用fmt.Println()函数将矩形和正方形的面积打印到控制台,其中ln表示新行。
例子
在这个例子中,我们将学习如何使用 shape 结构覆盖类中的方法。
package main
import (
"fmt"
)
type Shape struct {
area float64 //create area field in the struct
}
func (sq *Shape) Area() float64 {
return sq.area //return area of square
}
type Rectangle struct {
Shape
width float64 //width of rectangle
height float64 //height of rectangle
}
func (rect *Rectangle) CalculateArea() {
rect.area = rect.width * rect.height //area of rectangle
}
type Square struct {
Shape
side float64 //side of square
}
func (sq *Square) CalculateArea() {
sq.area = sq.side * sq.side //area of square
}
func main() {
rect := &Rectangle{width: 16, height: 6} //set the width and height of square
rect.CalculateArea()
fmt.Println("Area of rectangle: ", rect.Area()) //print area of rectangle
sq := □{side: 8} //set side of square
sq.CalculateArea()
fmt.Println("Area of square: ", sq.Area()) //print area of square.
}
输出
Area of rectangle: 96
Area of square: 64
方法2:使用形状接口
这里,矩形和正方形通过实现面积方法来实现形状接口。最后,输出将是正方形和长方形的面积。
算法
- 第1步 – 创建一个包main,并在程序中声明fmt(格式包)包。
-
第2步– 在开始时,我们创建一个名为Shape的接口,其中有一个名为Area()的函数,返回一个float64值。
-
第3步– 然后我们定义一个叫做Rectangle的结构,它有两个float64类型的属性,叫做宽度和高度。
-
第4步– 矩形结构的Area()方法是通过创建一个与Shape接口相同签名的函数来实现的,使用宽度和高度参数计算面积。
-
第5步– 以类似的方式,我们创建一个名为Square的结构,其字段类型为float64。
-
第6步– 然后,这次使用边栏来确定面积,我们为Square结构实现Area()方法。
-
第7步– 在主函数中调用矩形结构的Area()方法,并返回矩形的面积。
-
第8步– 此外,我们构建一个Square结构的实例,并使用其Area()方法来获得正方形的面积。
-
第9步– 使用fmt.Println()函数将两个图形的面积打印到控制台,其中ln表示新行。
例子
在这个例子中,我们将学习如何使用 shape 接口覆盖类中的方法。
package main
import (
"fmt"
)
type Shape interface {
Area() float64 //create area method
}
type Rectangle struct {
width float64 //width of rectangle
height float64 //height of rectangle
}
func (rect Rectangle) Area() float64 {
return rect.width * rect.height //area of rectangle
}
type Square struct {
side float64 //side of square
}
func (sq Square) Area() float64 {
return sq.side * sq.side //area of square
}
func main() {
rect := Rectangle{width: 16, height: 6} //set the width and height of rectangle
fmt.Println("Area of rectangle: ", rect.Area()) //print area of rectangle
sq := Square{side: 8} //set the sides of square
fmt.Println("Area of square: ", sq.Area()) //print area of square
}
输出
Area of rectangle: 96
Area of square: 64
总结
我们用两个例子执行了展示如何在类中覆盖方法的程序。在第一个例子中,我们使用了形状结构,在第二个例子中,我们使用了形状接口。