История изменений
Исправление korvin_, (текущая версия) :
Чем не наследование?
Тем, что это встраивание. Есть разница:
package main
import "fmt"
type T1 struct {
str string
}
type T2 struct {
T1
str2 string
}
func main() {
obj := new(T1)
obj = new(T2)
fmt.Println("done")
}
⇒
# command-line-arguments
/tmp/sandbox128261485/main.go:16: cannot use new(T2) (type *T2) as type *T1 in assignment
Наследование же образует подтип (хотя Ocaml не совсем удачный пример, там типы отделены от классов, в остальных статическитипизированных языках с ООП будет то же самое):
class t1 = object
val str = ""
end
class t2 = object
inherit t1
val str2 = ""
end
let () =
let obj = ref (new t1) in
obj := new t2 ;
print_endline "done"
⇒
done
Но большинство юзкейсов наследования оно покрывает, да.
Исправление korvin_, :
Чем не наследование?
Тем, что это встраивание. Есть разница:
package main
import "fmt"
type T1 struct {
str string
}
type T2 struct {
T1
str2 string
}
func main() {
obj := new(T1)
obj = new(T2)
fmt.Println("done")
}
⇒
# command-line-arguments
/tmp/sandbox128261485/main.go:16: cannot use new(T2) (type *T2) as type *T1 in assignment
Наследование же образует подтип (хотя Ocaml не совсем удачный пример, там типы отделены от классов, в остальных статическитипизированных языках с ООП будет то же самое):
class t1 = object
val str = ""
end
class t2 = object
inherit t1
val str2 = ""
end
let () =
let obj = ref (new t1) in
obj := new t2 ;
print_endline "done"
⇒
done
Но большинство юзкейсов наследования оно покрывает, да.
Исходная версия korvin_, :
Чем не наследование?
Тем, что это встраивание. Есть разница:
package main
import "fmt"
type T1 struct {
str string
}
type T2 struct {
T1
str2 string
}
func main() {
obj := new(T1)
obj = new(T2)
fmt.Println("done")
}
⇒
# command-line-arguments
/tmp/sandbox128261485/main.go:16: cannot use new(T2) (type *T2) as type *T1 in assignment
Наследование же образует подтип (хотя Ocaml не совсем удачный пример, там типы отделены от классов, в остальных статическитипизированных языках с ООП будет то же самое):
class t1 = object
val str = ""
end
class t2 = object
inherit t1
val str2 = ""
end
let () =
let obj = ref (new t1) in
obj := new t2 ;
print_endline "done"
⇒
done
Но большинство юзкейсов наследования оно покрывает, да.