Pewarisan Multi-Tingkat
Dukung rantai pewarisan yang dalam dengan delegasi __index yang tepat.
Pewarisan Multi-Tingkat adalah pelajaran Lua Academy gratis di CoddyKit. Ini adalah pelajaran 2 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Lua Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Lua Academy mencakup 4 pelajaran total.
Tinjauan Pewarisan Tunggal
Pewarisan tunggal dicapai dengan menetapkan Child.__index = Parent. Pencarian metode: jika tidak ditemukan di Child, cari di Parent melalui __index.
Memperluas Pabrik Kelas untuk Pewarisan
Tambahkan metode :extend() ke kelas dasar untuk membuat subkelas yang terhubung ke kelas induknya.
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
endMembuat Subkelas
Buat kelas anjing sebagai subkelas hewan, dengan mengganti init dan menambahkan metode baru.
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 WoofRangkaian Bertingkat
Perluas kelas anjing untuk membuat GuideDog — rangkaian pewarisan tiga tingkat.
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 Metode Induk
Selalu panggil kelas induk melalui referensi kelas, bukan melalui self, untuk menghindari rekursi tak terbatas.
function Dog:init(name)
Dog.super.init(self, name, "Woof") -- explicit super call
endUrutan Resolusi Metode
Lua menyelesaikan metode dari bawah ke atas melalui rantai __index. GuideDog → anjing → hewan → nihil. Yang pertama ditemukan akan digunakan.
Mengganti Metode
Definisikan metode dengan nama yang sama di subkelas untuk menggantinya. Panggil kelas induk secara eksplisit untuk penggantian sebagian.
function Dog:speak()
print(self.name .. " barks!")
Dog.super.speak(self) -- also call parent speak
endBatas Kedalaman
Rangkaian pewarisan yang sangat dalam memperlambat pencarian metode (setiap tingkat menambahkan satu langkah __index). Pilih komposisi jika kedalamannya lebih dari 3–4 tingkat.
Memeriksa Keanggotaan Kelas
Telusuri rantai metatabel untuk memeriksa apakah suatu instans termasuk dalam sebuah 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 Mempertahankan Kelas
Saat menyalin instans secara mendalam, pertahankan metatabelnya agar salinan tersebut tetap menjadi instans dari kelas yang benar.
Kapan Memilih Komposisi
Gunakan pewarisan untuk hubungan yang benar-benar merupakan hubungan anjing dan hewan. Gunakan komposisi (tabel komponen) untuk hubungan memiliki atau pencampuran perilaku yang fleksibel.
Pertanyaan tentang Pewarisan
Bagaimana cara kerja pewarisan bertingkat dalam Lua?
Ringkasan: Pewarisan Bertingkat
Perluas pabrik kelas dengan metode :extend() yang merangkai tautan __index. Panggil kelas induk secara eksplisit dengan ClassName.super.method(self, ...). Periksa keanggotaan dengan menelusuri rantai metatabel.
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Pewarisan Multi-Tingkat” gratis?
Ya — teks lengkap “Pewarisan Multi-Tingkat” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Lua Academy, upgrade ke CoddyKit PRO. Kursus Lua Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Pewarisan Multi-Tingkat”?
Dukung rantai pewarisan yang dalam dengan delegasi __index yang tepat. Kamu berlatih Lua Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai Lua Academy?
Tidak diperlukan pengalaman sebelumnya. Lua Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 2 dari 4.
Berapa lama pelajaran “Pewarisan Multi-Tingkat” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran Lua Academy ini?
Ya. Setiap pelajaran Lua Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Class Dasar dan Desain Konstruktor
- Pewarisan Multi-Tingkat
- Komposisi Mixin dan Pemeriksaan Interface
- instanceof dan Introspeksi Tipe