Я слышал, как много людей говорят о Go и как оно не поддерживает наследование. Пока я не использовал этот язык, я просто согласился с толпой и слушал, как говорят. После небольшого разговора с языком, справляясь с основами. Я наткнулся на этот сценарий:Есть ли поддержка наследования?
package main
type Thing struct {
Name string
Age int
}
type UglyPerson struct {
Person
WonkyTeeth bool
}
type Person struct {
Thing
}
type Cat struct {
Thing
}
func (this *Cat) SetAge(age int){
this.Thing.SetAge(age)
}
func (this *Cat GetAge(){
return this.Thing.GetAge() * 7
}
func (this *UglyPerson) GetWonkyTeeth() bool {
return this.WonkyTeeth
}
func (this *UglyPerson) SetWonkyTeeth(wonkyTeeth bool) {
this.WonkyTeeth = wonkyTeeth
}
func (this *Thing) GetAge() int {
return this.Age
}
func (this *Thing) GetName() string {
return this.Name
}
func (this *Thing) SetAge(age int) {
this.Age = age
}
func (this *Thing) SetName(name string) {
this.Name = name
}
теперь, что это делает его сочиняет Человек и Кошка структур, от Thing Struct. Поступая таким образом, структура Person и Cat не только разделяет те же поля, что и Thing Struct, но также и посредством композиции методы Thing также разделяются. Разве это не наследование? Кроме того, по implenting интерфейса как таковые:
type thing interface {
GetName() string
SetName(name string)
SetAge(age int)
}
Все три Структур теперь присоединились или я должен сказать, может быть использован в однородной моде, такие как массив «вещи».
Итак, я лежал на вас, это не наследование?
Редактировать
Добавлен новый производный STRUCT под названием «Гадкий человек» и ПЕРЕОПРЕДЕЛЕНЫ метод SetAge для Ката.
Нет, **, как вы сказали, ** это ** не наследование ** но ** Состав **. Быть педантичным ... что ты скажешь? У человека есть вещь? Вы не можете передать вещь вместо человека. О интерфейсах хорошо да, это ** как-то ** наследование, но вы не можете наследовать реализованные поведения, просто их определение. Представьте, что человек МОЖЕТ СДЕЛАТЬ что-то (но каждый исполнитель должен сделать это по-своему). –
Но синтаксический сахар, заставляет его чувствовать себя наследованием, разве это не все, что действительно есть наследование при использовании языка OO? – WeNeedAnswers
Я бы сказал, что это черты характера. – WeNeedAnswers