LINUX.ORG.RU

История изменений

Исправление 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

Но большинство юзкейсов наследования оно покрывает, да.