How does Go achieve method overriding without traditional inheritance?

Mary-Kate Olsen
Release: 2024-11-16 00:55:03
Original
629 people have browsed it

How does Go achieve method overriding without traditional inheritance?

Golang Method Overriding

In Go, the concept of method overriding is achieved using interfaces rather than through inheritance like in Java. Interfaces define a contract of methods without specifying their implementation.

Implementing Method Overriding in Go:

Using Interfaces:

  1. Define an interface with the method signature you want to override.
  2. Define a type that implements the interface and provides the overriding implementation.
  3. In the original type, use the interface type as a parameter to the method to be overridden.

Example:

// Interface for Get() method
type Getter interface {
    Get() string
}

// Base type with original implementation
type Base struct{}

func (base *Base) Get() string {
    return "base"
}

// Custom type with overriding implementation
type Sub struct {
    Base
}

func (sub *Sub) Get() string {
    return "Sub"
}
Copy after login

Advantage:

  • Preserves the existing behavior of Base while providing the mogelijkheid of overriding the Get() method.

Alternative Approach using Composition:

  1. Define a struct that embeds the original type and includes the overriding implementation.
  2. Use the embedded type to access the original functionality.

Example:

// Sub type with composition
type Sub struct {
    Base
    custom string
}

func (sub *Sub) Get() string {
    // Access the original method via embedded Base
    if sub.custom == "" {
        return sub.Base.Get()
    }
    return sub.custom
}
Copy after login

Advantage:

  • Maintains a single type definition without requiring additional interface types.

Note:

  • Be aware that using this approach may break existing code that assumes the original type's behavior.
  • Go's emphasis on composition and duck typing favors the use of interfaces for method overriding, rather than traditional inheritance-based overriding.

The above is the detailed content of How does Go achieve method overriding without traditional inheritance?. For more information, please follow other related articles on the PHP Chinese website!

source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Latest Articles by Author
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template