Пользователь пока ничего не рассказал о себе

Наибольший вклад в теги

Все теги (1)

Лучшие ответы пользователя

Все ответы (2)
  • Как "наследовать метод" golang?

    @s_kozlov
    package main
    
    
    import "fmt"
    
    type AnimalIntf interface {
    	Walk() AnimalIntf
    	Say() AnimalIntf
    }
    
    type Animal struct {
    	animal    AnimalIntf
    	Name string
    }
    
    type Rabbit struct {
    	Animal
    }
    
    
    // Animal
    func NewAnimal(name string) *Animal {
    	animal := new(Animal)
    	animal.animal = animal
    	animal.Name = name
    	return animal
    }
    
    //Метод Walk у каждого свой
    func (this *Animal) Walk() AnimalIntf {
    	fmt.Println("I walk", this.Name)
    	return this.animal
    }
    
    //Метод Say общий
    func (this *Animal) Say() AnimalIntf {
    	fmt.Println("Im Animal and my Name is", this.Name)
    	return this.animal
    }
    
    
    // Rabbit
    func NewRabbit(name string) *Rabbit {
    	rabbit := new(Rabbit)
    	rabbit.animal = rabbit
    	rabbit.Name = name
    	return rabbit
    }
    
    //Метод Walk изменяется для Rabbit и работает корректно
    func (this *Rabbit) Walk() AnimalIntf {
    	this.Animal.Walk()
    	fmt.Println("...and Jump")
    	return this.animal
    }
    
    
    func main() {
    
    	animal := NewAnimal("Зверь")
    	animal.Walk().Say().Walk()
    
    	fmt.Println("\n---------------------\n")
    
    	rabbit := NewRabbit("Кроль")
    	rabbit.Walk().Say().Walk()
    
    }

    примерно так, как вариант
    вывод:
    I walk Зверь
    Im Animal and my Name is Зверь
    I walk Зверь
    
    ---------------------
    
    I walk Кроль
    ...and Jump
    Im Animal and my Name is Кроль
    I walk Кроль
    ...and Jump
    Ответ написан
    Комментировать