Heim  >  Artikel  >  Backend-Entwicklung  >  Hat Golang abstrakte Klassen?

Hat Golang abstrakte Klassen?

青灯夜游
青灯夜游Original
2023-01-06 19:04:353975Durchsuche

golang hat keine abstrakten Klassen. Golang ist keine objektorientierte (OOP) Sprache. Es gibt keine Konzepte für Klassen, Vererbung und abstrakte Klassen. Es gibt jedoch Strukturen (Strukturen) und Schnittstellen (Schnittstellen), die indirekt durch die Kombination von implementiert werden können Struktur und Schnittstelle. Abstrakte Klassen in Objektsprachen.

Hat Golang abstrakte Klassen?

Die Betriebsumgebung dieses Tutorials: Windows 7-System, GO Version 1.18, Dell G3-Computer.

In einer objektorientierten Sprache wie Java sind abstrakte Klassen und Schnittstellen zwei Mechanismen, die wir häufig zum Definieren abstrakter Konzepte verwenden. In Golang gibt es kein Konzept von Klassen und Vererbung. In Golang gibt es Strukturen (struct), die Klassen in objektorientierten Sprachen ähneln. Es gibt auch Schnittstellen in Golang. Schnittstellen können eine Reihe von Methoden ohne spezifische Implementierungen definieren, die eine Möglichkeit bieten, das Verhalten von Objekten zu beschreiben.

In einigen Fällen müssen wir jedoch die abstrakte Klassenvererbung verwenden, um eleganteren Code zu schreiben. Allerdings gibt es in Golang kein Konzept einer abstrakten Klasse. In diesem Artikel wird eine Methode zur Implementierung abstrakter Klassen in Golang über Struktur und Schnittstelle vorgestellt.

So implementieren Sie abstrakte Klassen in Golang

Im Folgenden verwenden wir die Java-Sprache als Beispiel, um zu sehen, wie abstrakte Klassen in objektorientierten Sprachen implementiert werden. Wechseln Sie dann zur Golang-Sprache und implementieren Sie abstrakte Klassen über Struktur und Schnittstelle, um dieselbe Funktion auszuführen.

Implementierung abstrakter Klassen in objektorientierten Sprachen

Angenommen, wir müssen die folgenden Klassen implementieren (am Beispiel von Java):

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";
    }
}

Wir definieren die abstrakte Klasse Game und in dieser Klasse ist ein öffentlicher abstrakter String definiert name(); eine abstrakte Methode und public void play() eine öffentliche Methode. Dann haben wir zwei Klassen definiert, Dota und LOL, um Game zu erben, und jede hat public String name() implementiert.

Als nächstes sehen wir uns an, wie man abstrakte Klassen in Golang implementiert.

So implementieren Sie abstrakte Klassen in Golang

  • Schnittstelle definieren

Zuerst müssen wir abstrakte Methoden in der Schnittstelle definieren.

type IGame interface {
	Name() string
}
  • Definieren Sie die „Elternklasse“

Dann müssen wir struct verwenden, um die öffentlichen Methoden zu implementieren.

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

Hier ist der entscheidende Punkt, den wir in game IGame übergeben haben. Auf diese Weise können wir die Methode „Unterklasse“ aufrufen, um den Namen zu erhalten. Dadurch wird indirekt die abstrakte Methode des Aufrufs der Implementierung verschiedener „Unterklassen“ in der öffentlichen Methode realisiert. game IGame 传了进来。这样我们便可以调用”子类”的方法来获取名字。从而间接地实现了在公共方法中调用不同”子类”的实现的抽象方法。

  • 定义”子类”

接着,我们再定义”Dota”和”LOL”这 2 个 struct 即可。

type Dota struct {
    Game
}
func (d *Dota) Name() string {
	return "Dota"
}
type LOL struct {
    Game
}
func (l *LOL) Name() string {
	return "LOL"
}
  • 大功告成

现在,在初始化”Dota”和”LOL”结构体后,便可以调用 func (g *Game) play(game IGame)

Definieren Sie „Unterklasse“

Dann definieren wir die beiden Strukturen „Dota“ und „LOL“.

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

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

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

Fertig

🎜Jetzt können Sie nach der Initialisierung der Strukturen „Dota“ und „LOL“ die Methode func (g *Game) play(game IGame) aufrufen. 🎜rrreee🎜🎜🎜Zusammenfassung🎜🎜🎜🎜Dieser Artikel bietet eine Idee durch die Kombination von Struktur und Schnittstelle, um das abstrakte Klassenvererbungsmuster indirekt in objektorientierten Sprachen zu implementieren. 🎜🎜【Verwandte Empfehlungen: 🎜Go-Video-Tutorial🎜, 🎜Programmierunterricht🎜】🎜

Das obige ist der detaillierte Inhalt vonHat Golang abstrakte Klassen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn