В объектно-ориентированном программировании полиморфизм позволяет объектам демонстрировать различное поведение в зависимости от их класса. Но в Go концепция полиморфизма не реализована в традиционном понимании. Давайте углубимся в причины этого и выясним, как добиться аналогичной функциональности в Go.
Go не является традиционным объектно-ориентированным языком. Он использует другой подход, используя:
В отличие от объектно-ориентированных языков, Go не поддерживает переопределение методов или виртуальные методы. Это позволяет Go поддерживать более высокий уровень безопасности типов.
Чтобы добиться в Go поведения, подобного полиморфизму, мы можем использовать следующие методы:
Пример:
package main
import "fmt"
// Common interface
type Foo interface {
printFoo()
}
// Derived type with unique implementation
type FooImpl struct{}
func (f FooImpl) printFoo() {
fmt.Println("Print Foo Impl")
}
// Derived type composed using the common interface
type Bar struct {
FooImpl
}
// Function returning the common interface
func getFoo() Foo {
return Bar{}
}
func main() {
fmt.Println("Hello, playground")
b := getFoo()
b.printFoo()
}
В этом примере Foo — это общий интерфейс, FooImpl — производный тип со своей собственной реализацией, а Bar — производный тип, созданный с использованием FooImpl. Функция getFoo() возвращает экземпляр интерфейса Foo, позволяя нам рассматривать разные производные типы как один тип интерфейса.
Этот подход обеспечивает форму полиморфизма в Go, позволяя нам обрабатывать разные производные типы как экземпляры. общего интерфейса.
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3