Задать вопрос
Bekkazy
@Bekkazy

Как в GO наследовать и переопределить один метод?

Есть некий код на питоне. Реализовано через ООП.
class Animal:
    def __init__(self, name):
        self.name = name

    def say(self):
        print("My name is", self.name)

    def eat(self):
        print("My name is", self.name, "and i eat grass")

    def walk(self):
        print("My name is", self.name, "and i jump")

    def start(self):
        self.say()
        self.eat()
        self.walk()


class Shark(Animal):
    def eat(self):
        print("My name is", self.name, "and i eat seals")

    def walk(self):
        print("My name is", self.name, "and i swim in the ocean")


if __name__ == '__main__':
    a = Animal("Kangaroo")
    a.start()
    print("------------------------")
    s = Shark("Shark")
    s.start()


Очень надо такой же код реализовать на GO. Прогуглив, так и не нашел того что мне нужно. Может у вас будут подсказки?
  • Вопрос задан
  • 875 просмотров
Подписаться 2 Средний 3 комментария
Пригласить эксперта
Ответы на вопрос 2
@PapaStifflera
Родился, вырос...
Наследовать не получится. Нет наследования в Go.
Определяйте базовый тип, встраивайте в "наследника" и там же перекрывайте нужный метод.
Ответ написан
Комментировать
genrih_md
@genrih_md
Immaway
Можно что-то вроде этого написать, будет очень похоже )

package main

import "fmt"

// Doer do
type Doer interface {
	eat()
}

// Animal is Animal
type Animal struct {
	name string
}

func (animal *Animal) eat() {
	fmt.Println("My name is", animal.name)
}

// Shark is Animal
type Shark struct {
	Animal
}

func (shark *Shark) eat() {
	fmt.Println("My name is", shark.name, "and i eat seals")
}

func start(doer Doer) {
	doer.eat()
}

func main() {
	animal := new(Animal)
	animal.name = "Kangaroo"
	start(animal)
	fmt.Println("-----------------------")
	shark := new(Shark)
	shark.name = "Shark"
	start(shark)
}
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы