Lua Academy · Pelajaran

Pewarisan Berbilang Tahap

Sokong rantaian pewarisan mendalam dengan perwakilan __index yang betul.

Pelajaran 2 daripada 413 langkah

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
end

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

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

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

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

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

Salinan 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.

Percuma untuk bermula

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

  1. Reka Bentuk Kelas Asas dan Pembina
  2. Pewarisan Berbilang Tahap
  3. Komposisi Mixin dan Semakan Antara Muka
  4. instanceof dan Introspeksi Jenis
← Kembali ke Lua Academy