Встречается на собеседованиях • сегодня

Как полиморфизм осуществлен в Golang

Полиморфизм реализуется через интерфейсы. Не реализуется через классическое наследование, как в некоторых других объектно-ориентированных языках, потому что Go не поддерживает наследование в классическом понимании. Вместо этого он использует композицию и интерфейсы для достижения гибкости в дизайне программ.

Интерфейсы

Это набор сигнатур методов. Тип считается реализующим интерфейс, если он определяет все методы, перечисленные в интерфейсе. Важно отметить, что не требуется явно указывать, что тип реализует интерфейс (например, с помощью ключевого слова `implements`), это определяется автоматически.

Давайте рассмотрим простой пример, демонстрирующий, как полиморфизм может быть реализован в Go с помощью интерфейсов:

text
```go
package main

import "fmt"

// Shape интерфейс, определяющий метод Area
type Shape interface {
    Area() float64
}

// Circle структура, представляющая круг
type Circle struct {
    Radius float64
}

// Area метод для Circle
func (c Circle) Area() float64 {
    return 3.14 * c.Radius * c.Radius
}

// Rectangle структура, представляющая прямоугольник
type Rectangle struct {
    Width, Height float64
}

// Area метод для Rectangle
func (r Rectangle) Area() float64 {
    return r.Width * r.Height
}

// TotalArea функция, принимающая слайс фигур и возвращающая суммарную площадь
func TotalArea(shapes []Shape) float64 {
    var total float64
    for _, s := range shapes {
        total += s.Area()
    }
    return total
}

func main() {
    circle := Circle{Radius: 5}
    rectangle := Rectangle{Width: 3, Height: 4}

    shapes := []Shape{circle, rectangle}
    fmt.Println("Total Area:", TotalArea(shapes))
}
```

В этом примере:

  • Интерфейс `Shape` определяет метод `Area()`.
  • `Circle` и `Rectangle` оба реализуют этот интерфейс.
  • Функция `TotalArea` принимает слайс объектов, которые реализуют интерфейс `Shape`. Это позволяет функции работать с любыми объектами, которые удовлетворяют интерфейсу `Shape`, что и является демонстрацией полиморфизма: одна функция обрабатывает различные типы данных.

Полиморфизм достигается благодаря интерфейсам, которые позволяют функциям и другим частям программы работать с различными типами, не зная точных деталей реализации каждого типа. Это обеспечивает гибкость и масштабируемость в приложениях, позволяя легко добавлять новые типы данных, которые могут взаимодействовать с существующими функциями.

May 22, 2024, easyoffer

как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы