0Pricing
Lua Academy · Pelajaran

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
end

Membuat 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 Woof

Rangkaian 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)
end

Memanggil 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
end

Urutan 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
end

Batas 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))  -- true

Salinan 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

  1. Class Dasar dan Desain Konstruktor
  2. Pewarisan Multi-Tingkat
  3. Komposisi Mixin dan Pemeriksaan Interface
  4. instanceof dan Introspeksi Tipe
← Kembali ke Lua Academy