golang에는 추상 클래스가 없습니다. Golang은 객체지향(OOP) 언어가 아니며 클래스, 상속, 추상 클래스의 개념이 없습니다. 그러나 golang에는 구조(구조체)와 인터페이스(인터페이스)가 있으며 이를 조합하여 간접적으로 구현할 수 있습니다. 객체 언어의 추상 클래스.
이 튜토리얼의 운영 환경: Windows 7 시스템, GO 버전 1.18, Dell G3 컴퓨터.
Java와 같은 객체 지향 언어에서 추상 클래스와 인터페이스는 추상 개념을 정의하는 데 자주 사용하는 두 가지 메커니즘입니다. golang에는 클래스와 상속이라는 개념이 없습니다. golang에는 객체지향 언어의 클래스와 유사한 구조(struct)가 있습니다. golang에는 인터페이스도 있습니다. 인터페이스는 객체의 동작을 설명하는 방법을 제공하는 특정 구현 없이 메서드 집합을 정의할 수 있습니다.
그러나 어떤 경우에는 더 우아한 코드를 작성하는 데 도움이 되도록 추상 클래스 상속을 사용해야 합니다. 하지만 golang에는 추상 클래스라는 개념이 없습니다. 이번 글에서는 구조체와 인터페이스를 통해 golang에서 추상 클래스를 구현하는 방법을 소개하겠습니다.
Golang에서 추상 클래스를 구현하는 방법
아래에서는 Java 언어를 예로 들어 객체지향 언어에서 추상 클래스를 구현하는 방법을 살펴보겠습니다. 그런 다음 golang 언어로 전환하고 구조체와 인터페이스를 통해 추상 클래스를 구현하여 동일한 기능을 완성합니다.
객체 지향 언어에서 추상 클래스 구현
다음 클래스를 구현해야 한다고 가정합니다(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"; } }
Game 추상 클래스를 정의하고 이 클래스에서 공용 추상 문자열이 정의됩니다. name(); 추상 메서드이고 public void play()는 공용 메서드입니다. 그런 다음 Game을 상속하기 위해 Dota와 LOL이라는 두 개의 클래스를 정의하고 각각 public String name()을 구현했습니다.
다음으로 golang에서 추상 클래스를 구현하는 방법을 살펴보겠습니다.
golang에서 추상 클래스를 구현하는 방법
인터페이스 정의
먼저 인터페이스에서 추상 메서드를 정의해야 합니다.
type IGame interface { Name() string }
"부모 클래스"를 정의합니다
그런 다음 구조체를 사용하여 공용 메서드를 구현해야 합니다.
type Game struct {} func (g *Game) play(game IGame) { fmt.Printf(fmt.Sprintf("%s is awesome!", game.Name())) }
여기서 핵심은 게임 IGame
을 전달했다는 것입니다. 이런 방식으로 "하위 클래스" 메서드를 호출하여 이름을 얻을 수 있습니다. 이에 따라 공용 메소드에서 다양한 "하위 클래스"의 구현을 호출하는 추상 메소드를 간접적으로 구현합니다. 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)
"하위 클래스" 정의
그런 다음 "Dota"와 "LOL" 두 구조체를 정의합니다.
dota := &Dota{} dota.play(dota) lol := &LOL{} lol.play(lol) // 输出: //Dota is awesome! //LOL is awesome!
func (g *Game) play(game IGame)
메서드를 호출할 수 있습니다. 🎜rrreee🎜🎜🎜Summary🎜🎜🎜🎜이 글에서는 객체지향 언어에서 추상 클래스 상속 패턴을 간접적으로 구현하기 위한 아이디어를 구조체와 인터페이스의 조합을 통해 제공합니다. 🎜🎜【관련 추천: 🎜Go 비디오 튜토리얼🎜, 🎜프로그래밍 교육🎜】🎜위 내용은 golang에는 추상 클래스가 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!