Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Perbincangan mendalam tentang persamaan dan perbezaan antara antara muka berfungsi Golang dan kelas abstrak

Perbincangan mendalam tentang persamaan dan perbezaan antara antara muka berfungsi Golang dan kelas abstrak

王林
王林asal
2024-04-20 09:21:011060semak imbas

Antara muka fungsional dan kelas abstrak kedua-duanya digunakan untuk kebolehgunaan semula kod, tetapi ia dilaksanakan dalam cara yang berbeza: antara muka berfungsi melalui fungsi rujukan dan kelas abstrak melalui warisan. Antara muka berfungsi tidak boleh dibuat instantiated, tetapi kelas abstrak boleh. Antara muka berfungsi mesti melaksanakan semua kaedah yang diisytiharkan, manakala kelas abstrak hanya boleh melaksanakan beberapa kaedah.

深入探讨 Golang 函数接口与抽象类的异同

Persamaan dan perbezaan antara antara muka berfungsi Go dan kelas abstrak

Dalam bahasa Go, antara muka berfungsi dan kelas abstrak ialah dua konsep penting, kedua-duanya digunakan untuk mewakili tingkah laku dan menyediakan kebolehgunaan semula kod. Walau bagaimanapun, kedua-duanya berbeza dalam senario pelaksanaan dan penggunaan.

Antara Muka Fungsian

Antara muka berfungsi ialah jenis yang merujuk fungsi dengan tandatangan tertentu. Ia mentakrifkan parameter input dan output fungsi, tetapi tidak perlu melaksanakan badan fungsi.

Sintaks:

type fnType func(parameters) (returnType)

Contoh:

type Handler func(w http.ResponseWriter, r *http.Request)

Kelas abstrak

Kelas abstrak ialah kelas yang hanya mengandungi pengisytiharan tanpa pelaksanaan. Ia mentakrifkan antara muka yang memerlukan subkelas untuk melaksanakan pengisytiharan ini.

Sintaks:

type Interface interface {
    Method1()
    Method2()
}

Persamaan dan Perbezaan

Kesamaan:

  • Kedua-duanya menyediakan kod kebolehgunaan semula, membenarkan penciptaan komponen yang boleh diganti.
  • boleh dilaksanakan dengan pelbagai jenis.

Perbezaan:

  • Kaedah pelaksanaan: Antara muka berfungsi dilaksanakan dengan merujuk fungsi, manakala kelas abstrak dilaksanakan melalui pewarisan.
  • Kebolehkekalan: Antara muka berfungsi tidak boleh dibuat instantiate, tetapi kelas abstrak boleh.
  • Pilihan pelaksanaan: Antara muka berfungsi mesti melaksanakan semua kaedah yang diisytiharkan, manakala kelas abstrak hanya boleh melaksanakan beberapa kaedah.
  • Sintaks: Antara muka fungsi menggunakan func 关键字,而抽象类使用 interface kata kunci.

Kes praktikal

Antara muka berfungsi:

Anda boleh menggunakan antara muka berfungsi untuk mencipta kod gandingan longgar, membenarkan komponen berbeza menggunakan pelaksanaan berbeza.

type Shape interface {
    Area() float64
}

type Square struct {
    Side float64
}

func (s *Square) Area() float64 {
    return s.Side * s.Side
}

type Circle struct {
    Radius float64
}

func (c *Circle) Area() float64 {
    return math.Pi * c.Radius * c.Radius
}

func CalculateArea(shapes []Shape) float64 {
    totalArea := 0.0
    for _, shape := range shapes {
        totalArea += shape.Area()
    }
    return totalArea
}

Kelas abstrak:

Anda boleh menggunakan kelas abstrak untuk mentakrifkan gelagat awam dan membenarkan subkelas melaksanakan atau mengatasi gelagat ini mengikut keperluan.

rreeee

Atas ialah kandungan terperinci Perbincangan mendalam tentang persamaan dan perbezaan antara antara muka berfungsi Golang dan kelas abstrak. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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