Skip to content

Latest commit

 

History

History
44 lines (30 loc) · 2.62 KB

10_embed.md

File metadata and controls

44 lines (30 loc) · 2.62 KB

Төрөл өртгөтгөх

Бүтцийн талбарууд нь ихэвчлэн ”юмтай байх”, “агуулагдах”, “харяалагдах” хамаарлыг илэрхийлдэг. Жишээлбэл дараах Person төрөл Name талбартай байна. Эндээс “хүн бол нэртэй” гэсэн холбоос харагдаж байна.

type Person struct {
    Name string
}

Харин методууд нь тухайн төрлийн “чадвар”, “зан байдлыг” илэрхийлдэг. Жишээлбэл Person төрөлд Talk() функц нэмэе. Эндээс “хүн ярьж чаддаг” гэсэн чадвар харагдах болно.

type Person struct {

    func (p *Person) Talk() {
        fmt.Println("Сайна уу, Миний нэр ", p.Name)
    }
}

Дээрх төрлөөс Android нэртэй шинэ төрөл үүсгэе. Ингэхдээ шинэ Android төрөл нь Person-д байгаа бүх шинжийг авахыг хүсвэл яах вэ? Үүнийг “Android бол Person” хэлбэрийн хамаарал гэж хэлж болно, ө.х Person-д байдаг шинжүүд (талбарууд) болон чадваруудыг (метод) бүгдийг нь Android агуулна гэсэн үг.

Ийм маягийн хамаарлыг бусад програмчлалын хэлэнд удамших, өвлөх, өргөтгөх гэх мэтээр нэрлэдэг. Go хэлэнд эмбеддэд төрөл гэж нэрлэдэг бөгөөд дараах байдлаар бичдэг:

type Android struct {
    Person     // embedding буюу Person төрлийн шинжүүдийг агуулж байна

    model string // шинэ гишүүн
}

Энд Person төрлийн урд обект байхгүй бичигдсэнийг анзаараарай. Энэ тодорхойлолт нь шинээр үүсэж байгаа Android төрөл нь Person төрлийн бүх шинж, чадварыг агуулна гэдгийг илэрхийлнэ.

Ингээд хэрэв Android бол Person гэдэг нь үнэн бол Android төрлийн обект мөн “ярьж чадах” ёстой:

a := new(Android)
a.Talk()

Androidтөрөлд model нэртэй нэг шинэ талбар нэмэгдсэн байгааг анзаараарай. Эндээс “Android бол Person” гэдэг нь үнэн, харин Person нь Android-с өөр болж байна.