Monitasoinen perintä
Tukekaa syviä perintäketjuja asianmukaisella __index-delegoinnilla.
Monitasoinen perintä on ilmainen Lua Academy-oppitunti CoddyKitissä. Tämä on oppitunti 2/4. Voit lukea tästä oppimispolusta kokonaan mitkä tahansa 3 oppituntia ilmaiseksi — sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä käytännön harjoittelun sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Oppitunti kuuluu Lua Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Lua Academy-kurssilla on yhteensä 4 oppituntia.
Kertaus yksittäisestä perinnästä
Yksittäinen perintä toteutetaan asettamalla Child.__index = Parent. Metodihaku toimii näin: jos metodia ei löydy Child-luokasta, se etsitään Parent-luokasta __index-määrityksen kautta.
Luokkatehtaan laajentaminen perintää varten
Lisätkää perusluokkaan :extend()-metodi, joka luo emoluokkaan yhdistetyn aliluokan.
function Animal:extend()
local cls = {}
cls.__index = cls
setmetatable(cls, {__index = self})
cls.super = self
function cls:new(...)
local inst = setmetatable({}, cls)
if inst.init then inst:init(...) end
return inst
end
return cls
endAliluokan luominen
Luokaa Animal-luokasta periytyvä Dog-aliluokka, joka korvaa init-metodin ja lisää uusia metodeja.
local Dog = Animal:extend()
function Dog:init(name)
Dog.super.init(self, name, "Woof")
self.tricks = {}
end
function Dog:learnTrick(trick)
self.tricks[#self.tricks+1] = trick
end
local d = Dog:new("Rex")
d:learnTrick("sit")
d:speak() -- Rex says WoofMonitasoinen ketju
Laajentakaa Dog-luokkaa ja luokaa GuideDog — kolmikerroksinen perintäketju.
local GuideDog = Dog:extend()
function GuideDog:init(name, owner)
GuideDog.super.init(self, name)
self.owner = owner
end
function GuideDog:guide()
print(self.name .. " guides " .. self.owner)
endsuper-metodien kutsuminen
Kutsukaa super-metodia aina luokkaviitteen kautta, ei self-viitteen kautta, jotta vältätte loputtoman rekursion.
function Dog:init(name)
Dog.super.init(self, name, "Woof") -- explicit super call
endMetodien ratkaisujärjestys
Lua ratkaisee metodit alhaalta ylöspäin __index-ketjujen kautta. GuideDog → Dog → Animal → nil. Ensimmäinen löydetty metodi valitaan.
Metodien korvaaminen
Määrittäkää aliluokkaan samanniminen metodi sen korvaamiseksi. Kutsukaa super-metodia nimenomaisesti osittaisia korvauksia varten.
function Dog:speak()
print(self.name .. " barks!")
Dog.super.speak(self) -- also call parent speak
endSyvyysrajat
Hyvin syvät perintäketjut hidastavat metodihakua (jokainen taso lisää yhden __index-vaiheen). Suosikaa koostamista, jos tasoja on enemmän kuin 3–4.
Luokkajäsenyyden tarkistaminen
Käykää metataulukkojen ketju läpi tarkistaaksenne, kuuluuko instanssi tiettyyn luokkaan.
local function isA(instance, cls)
local mt = getmetatable(instance)
while mt do
if mt == cls then return true end
mt = getmetatable(mt)
end
return false
end
print(isA(d, Dog)) -- true
print(isA(d, Animal)) -- trueSyvä kopio luokka säilyttäen
Säilyttäkää instansseja syväkopioidessanne niiden metataulukko, jotta kopio on edelleen oikean luokan instanssi.
Milloin koostamista kannattaa suosia
Käyttäkää perintää aitoihin is-a-suhteisiin (Dog is-a Animal). Käyttäkää koostamista (komponenttitaulukoita) has-a-suhteisiin tai joustavaan toimintojen yhdistämiseen.
Perintää koskeva kysymys
Miten monitasoinen perintä toimii Luassa?
Kertaus: Monitasoinen perintä
Laajentakaa luokkatehdasta :extend()-metodilla, joka ketjuttaa __index-linkit. Kutsukaa super-metodia nimenomaisesti muodossa ClassName.super.method(self, ...). Tarkistakaa luokkajäsenyys käymällä metataulukkojen ketju läpi.
Opi Lua tekoälytuutorin avulla — ilmaiseksi
Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.
- Kurssit
- 40
- Oppitunnit
- 159
Usein kysytyt kysymykset
Onko oppitunti ”Monitasoinen perintä” ilmainen?
Kyllä — voit lukea täällä verkossa kokonaan ilmaiseksi mitkä tahansa Lua Academy-oppimispolun 3 oppituntia, myös oppitunnin “Monitasoinen perintä”. Sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä interaktiiviset harjoitukset sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Lua Academy-kurssilla on yhteensä 4 oppituntia.
Mitä opin oppitunnilla ”Monitasoinen perintä”?
Tukekaa syviä perintäketjuja asianmukaisella __index-delegoinnilla. Harjoittelet Lua Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.
Tarvitsenko kokemusta aloittaakseni Lua Academy-opiskelun?
Aiempi kokemus ei ole tarpeen. CoddyKitin Lua Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 2/4.
Kuinka kauan ”Monitasoinen perintä”-oppitunnin suorittaminen kestää?
Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.
Voinko kirjoittaa ja suorittaa koodia tällä Lua Academy-oppitunnilla?
Kyllä. Jokainen Lua Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.
Kaikki tämän kurssin oppitunnit
- Kantaluokan ja rakentajan suunnittelu
- Monitasoinen perintä
- Mixin-koostaminen ja rajapintojen tarkistus
- instanceof ja tyyppien introspektio