Hat Golang abstrakte Klassen?

青灯夜游
Freigeben: 2023-01-06 19:04:35
Original
4068 Leute haben es durchsucht

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";
    }
}
Nach dem Login kopieren

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
}
Nach dem Login kopieren
  • 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()))
}
Nach dem Login kopieren

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"
}
Nach dem Login kopieren
  • 大功告成

现在,在初始化”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!
Nach dem Login kopieren

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!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage