Sobes.tech
Junior — Middle

What is the difference between embedding and inheritance mechanisms in object-oriented programming?

sobes.tech AI

Answer from AI

In object-oriented programming (and in Go, in particular), inheritance and embedding are two ways of code reuse, but they differ in mechanics and semantics.

  • Inheritance is a mechanism where one class (or type) extends another, inheriting its properties and methods, and can override them. In Go, there is no classical inheritance.

  • Embedding in Go is when one type includes another type as an unnamed field. This allows "inheriting" methods of the embedded type, but without a strict inheritance hierarchy. Embedding provides composition and delegation instead of inheritance.

Example of embedding in Go:

 type Animal struct {
    Name string
}

func (a Animal) Speak() string {
    return "..."
}

type Dog struct {
    Animal // embedding
}

func (d Dog) Speak() string {
    return "Woof!"
}

Here, Dog embeds Animal and can use its methods, but can also override them.

Thus, embedding in Go is a more flexible and simpler way of code reuse compared to classical inheritance.