Rumah > pembangunan bahagian belakang > Golang > Pelaksanaan polimorfisme fungsi golang dalam pengaturcaraan berorientasikan objek

Pelaksanaan polimorfisme fungsi golang dalam pengaturcaraan berorientasikan objek

PHPz
Lepaskan: 2024-05-04 16:03:02
asal
837 orang telah melayarinya

Dalam bahasa Go, fungsi boleh disimpan sebagai nilai antara muka, dengan itu mencapai polimorfisme: tentukan antara muka dan tentukan satu set tandatangan kaedah. Buat jenis yang melaksanakan antara muka dan melaksanakan kaedah ini untuknya. Tentukan fungsi yang menerima nilai antara muka sebagai input. Kaedah yang hanya menggunakan nilai antara muka dalam fungsi, tanpa mengira jenis sebenar. Fungsi panggilan dengan nilai pelbagai jenis untuk mencapai polimorfisme.

Pelaksanaan polimorfisme fungsi golang dalam pengaturcaraan berorientasikan objek

Pelaksanaan polimorfisme fungsi bahasa Go dalam pengaturcaraan berorientasikan objek

Dalam bahasa Go, fungsi boleh disimpan sebagai nilai antara muka, yang membolehkan kita mencapai polimorfisme walaupun bahasa Go itu sendiri tidak berorientasikan objek.

Antaramuka

Antaramuka mentakrifkan tandatangan set kaedah yang mesti dilaksanakan mengikut jenis yang melaksanakan antara muka. Sebagai contoh, kami mentakrifkan antara muka Bentuk: Shape 接口:

type Shape interface {
    Area() float64
}
Salin selepas log masuk

类型实现接口

我们可以创建实现 Shape 接口的类型,如下所示:

type Rectangle struct {
    width, height float64
}

func (r Rectangle) Area() float64 {
    return r.width * r.height
}

type Circle struct {
    radius float64
}

func (c Circle) Area() float64 {
    return math.Pi * c.radius * c.radius
}
Salin selepas log masuk

使用函数作为接口值

现在,我们创建了一个 Shape 接口,我们可以使用函数作为其值。为此,我们定义一个 calculateArea 函数,它接受一个 Shape 接口值作为输入。

func calculateArea(s Shape) float64 {
    return s.Area()
}
Salin selepas log masuk

实战案例

现在,让我们创建一个实例来演示多态性是如何实现的。

func main() {
    // 创建一个 Rectangle 和一个 Circle
    r := Rectangle{width: 2, height: 3}
    c := Circle{radius: 5}

    // 使用函数计算他们的面积
    areaR := calculateArea(r)
    areaC := calculateArea(c)

    fmt.Println("Rectangle area:", areaR)
    fmt.Println("Circle area:", areaC)
}
Salin selepas log masuk

输出:

Rectangle area: 6
Circle area: 78.53981633974483
Salin selepas log masuk

在这个例子中,calculateArea 函数只使用传入的 Shape 接口的 Area 方法,无论实际类型是 Rectangle 还是 Circlerrreee

Taip melaksanakan antara muka 🎜🎜 Kami boleh mencipta jenis yang melaksanakan antara muka Bentuk seperti berikut: 🎜rrreee🎜Gunakan fungsi sebagai antara muka Values🎜🎜Sekarang kita telah mencipta antara muka Shape, kita boleh menggunakan fungsi sebagai nilainya. Untuk melakukan ini, kami mentakrifkan fungsi calculateArea yang menerima nilai antara muka Shape sebagai input. 🎜rrreee🎜Kes Praktikal🎜🎜Sekarang, mari kita cipta satu contoh untuk menunjukkan cara polimorfisme dilaksanakan. 🎜rrreee🎜Output: 🎜rrreee🎜Dalam contoh ini, fungsi calculateArea hanya menggunakan kaedah Area antara muka Shape yang dihantar, tanpa mengira jenis sebenar Adakah ia Rectangle atau Bulatan. Ini adalah penjelmaan polimorfisme. 🎜

Atas ialah kandungan terperinci Pelaksanaan polimorfisme fungsi golang dalam pengaturcaraan berorientasikan objek. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan