Home  >  Article  >  Backend Development  >  Does golang have abstract classes?

Does golang have abstract classes?

青灯夜游
青灯夜游Original
2023-01-06 19:04:354056browse

Golang does not have abstract classes. Golang is not an object-oriented (OOP) language. It has no concepts of classes, inheritance, and abstract classes. However, there are structures (structs) and interfaces (interfaces) in golang, which can be indirectly implemented through the combination of struct and interface. Abstract classes in object languages.

Does golang have abstract classes?

The operating environment of this tutorial: Windows 7 system, GO version 1.18, Dell G3 computer.

In an object-oriented language like Java, abstract classes and interfaces are two mechanisms that we often use to define abstract concepts. In golang, there is no concept of classes and inheritance. There are structures (struct) in golang, which are similar to classes in object-oriented languages. Golang also has interfaces. Interfaces can define a set of methods without specific implementations, which provide a way to describe the behavior of objects.

However, in some cases, we need to use abstract class inheritance to help us write more elegant code. However, there is no concept of abstract class in golang. This article will introduce a method to implement abstract class in golang through struct and interface.

How to implement abstract classes in Golang

Below we will use the Java language as an example to see how to implement abstraction in an object-oriented language kind. Then switch to golang language and implement abstract classes through struct and interface to complete the same function.

Implementation of abstract classes in object-oriented languages

Suppose we need to implement the following classes (using Java as an example):

public abstract class Game
{
    public void play()
    {
        System.out.println(this.name() + " is awesome!");
    }
    public abstract String name();
}
public class Dota extends Game
{
    public String name()
    {
        return "Dota";
    }
}
public class LOL extends Game
{
    public String name()
    {
        return "LOL";
    }
}

We defined the Game abstract class, in which we defined an abstract method public abstract String name(); and a public method public void play(). Then we defined two classes, Dota and LOL, to inherit Game, and each implemented public String name().

Next let’s see how to implement abstract classes in golang.

How to implement abstract classes in golang

  • Define interface

First, we need to Abstract methods are defined in interface.

type IGame interface {
	Name() string
}
  • Define the "parent class"

Then, we need to use struct to implement the public methods.

type Game struct {}
func (g *Game) play(game IGame) {
	fmt.Printf(fmt.Sprintf("%s is awesome!", game.Name()))
}

Here is the key point, we passed in game IGame. In this way we can call the "subclass" method to get the name. Thus indirectly realizing the abstract method of calling the implementation of different "subclasses" in the public method.

  • Define "subclass"

Then, we define the two structs "Dota" and "LOL" .

type Dota struct {
    Game
}
func (d *Dota) Name() string {
	return "Dota"
}
type LOL struct {
    Game
}
func (l *LOL) Name() string {
	return "LOL"
}
  • Done

Now, after initializing the "Dota" and "LOL" structures, you can call func (g *Game) play(game IGame) method.

dota := &Dota{}
dota.play(dota)

lol := &LOL{}
lol.play(lol)

// 输出:
//Dota is awesome!
//LOL is awesome!

Summary

This article provides an idea to indirectly implement abstract classes in object-oriented languages ​​through the combination of struct and interface. Inherited pattern.

【Related recommendations: Go video tutorial, Programming teaching

The above is the detailed content of Does golang have abstract classes?. For more information, please follow other related articles on the PHP Chinese website!

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