Pewarisan Berbilang Tahap
Sokong rantaian pewarisan mendalam dengan perwakilan __index yang betul.
Pewarisan Berbilang Tahap ialah pelajaran Lua Academy percuma di CoddyKit. Ini ialah pelajaran 2 daripada 4. Sebanyak 3 pelajaran dalam laluan pembelajaran ini boleh dibaca sepenuhnya secara percuma — selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan praktikal dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran Lua Academy, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus Lua Academy merangkumi sejumlah 4 pelajaran.
Ulasan Pewarisan Tunggal
Pewarisan tunggal dicapai dengan menetapkan Child.__index = Parent. Pencarian kaedah: jika tiada dalam Child, cari dalam Parent melalui __index.
Melanjutkan Kilang Kelas untuk Pewarisan
Tambahkan kaedah :extend() kepada kelas asas untuk mencipta subkelas yang dipautkan kepada kelas induk.
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
endMencipta Subkelas
Cipta Anjing sebagai subkelas Haiwan, gantikan init dan tambahkan kaedah baharu.
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 WoofRantaian Berbilang Tahap
Lanjutkan Anjing untuk mencipta GuideDog — rantaian pewarisan tiga tahap.
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)
endMemanggil Kaedah Induk
Sentiasa panggil kaedah induk melalui rujukan kelas, bukan melalui self, untuk mengelakkan rekursi tanpa penghujung.
function Dog:init(name)
Dog.super.init(self, name, "Woof") -- explicit super call
endSusunan Penyelesaian Kaedah
Lua menyelesaikan kaedah dari bawah ke atas melalui rantaian __index. GuideDog → Anjing → Haiwan → tiada. Padanan pertama yang ditemui akan digunakan.
Menggantikan Kaedah
Takrifkan kaedah dengan nama yang sama dalam subkelas untuk menggantikannya. Panggil kaedah induk secara jelas untuk penggantian separa.
function Dog:speak()
print(self.name .. " barks!")
Dog.super.speak(self) -- also call parent speak
endHad Kedalaman
Rantaian pewarisan yang sangat dalam melambatkan pencarian kaedah (setiap tahap menambah satu langkah __index). Utamakan gubahan untuk lebih daripada 3-4 tahap.
Menyemak Keahlian Kelas
Telusuri rantaian jadual meta untuk menyemak sama ada sesuatu tika tergolong dalam kelas.
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)) -- trueSalinan Mendalam dengan Pengekalan Kelas
Apabila menyalin tika secara mendalam, kekalkan jadual meta supaya salinan itu masih menjadi tika bagi kelas yang betul.
Bila Hendak Mengutamakan Gubahan
Gunakan pewarisan untuk hubungan sebenar ialah-a (Anjing ialah Haiwan). Gunakan gubahan (jadual komponen) untuk hubungan mempunyai atau pencampuran tingkah laku yang fleksibel.
Soalan Pewarisan
Bagaimanakah pewarisan berbilang tahap berfungsi dalam Lua?
Imbas Kembali: Pewarisan Berbilang Tahap
Lanjutkan kilang kelas dengan kaedah :extend() yang merantaikan pautan __index. Panggil kaedah induk secara jelas dengan ClassName.super.method(self, ...). Semak keahlian dengan menelusuri rantaian jadual meta.
Pelajari Lua dengan tutor kecerdasan buatan — percuma
Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.
- Kursus
- 40
- Pelajaran
- 159
Soalan Lazim
Adakah pelajaran “Pewarisan Berbilang Tahap” percuma?
Ya — sebanyak 3 pelajaran dalam laluan pembelajaran Lua Academy, termasuk “Pewarisan Berbilang Tahap”, boleh dibaca sepenuhnya secara percuma di web ini. Selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan interaktif dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Kursus Lua Academy merangkumi sejumlah 4 pelajaran.
Apakah yang akan saya pelajari dalam “Pewarisan Berbilang Tahap”?
Sokong rantaian pewarisan mendalam dengan perwakilan __index yang betul. Anda berlatih Lua Academy menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.
Adakah saya memerlukan pengalaman untuk memulakan Lua Academy?
Tiada pengalaman terdahulu diperlukan. Pembelajaran Lua Academy di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 2 daripada 4.
Berapa lamakah pelajaran “Pewarisan Berbilang Tahap” diambil?
Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.
Bolehkah saya menulis dan menjalankan kod dalam pelajaran Lua Academy ini?
Ya. Setiap pelajaran Lua Academy menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.
Semua pelajaran dalam kursus ini
- Reka Bentuk Kelas Asas dan Pembina
- Pewarisan Berbilang Tahap
- Komposisi Mixin dan Semakan Antara Muka
- instanceof dan Introspeksi Jenis