Mewarisi method
Termasuk bagian Pemrograman Berorientasi Object dalam perjalanan Lua di Coddy. Pelajaran 32 dari 70.
Setelah hubungan pewarisan terbentuk, instance child class otomatis mendapatkan akses ke semua method parent. Ini terjadi melalui rantai pencarian Lua. Saat kamu memanggil method pada sebuah instance, Lua menelusuri setiap tabel yang terhubung hingga menemukan yang kamu cari.
Perhatikan pengaturan ini, saat Animal mendefinisikan method :breathe():
local Animal = {}
Animal.__index = Animal
function Animal:new()
local obj = {}
setmetatable(obj, Animal)
return obj
end
function Animal:breathe()
print("Breathing...")
end
-- Dog mewarisi Animal
local Dog = {}
Dog.__index = Dog
setmetatable(Dog, {__index = Animal})
function Dog:new()
local obj = {}
setmetatable(obj, Dog)
return obj
endSekarang perhatikan apa yang terjadi saat kita membuat Dog dan memanggil method milik induknya:
local buddy = Dog:new()
buddy:breathe() -- output: Breathing...class Dog tidak pernah mendefinisikan :breathe(), tetapi tetap berfungsi. Lua pertama-tama memeriksa buddy, tidak menemukan apa pun, lalu memeriksa Dog, tetap tidak menemukan apa pun, dan akhirnya menemukannya di Animal. Pewarisan method otomatis ini berarti kamu cukup menulis perilaku yang digunakan bersama sekali di parent, lalu setiap child class langsung mendapat manfaatnya.
Tantangan
MudahMari buat hierarki makhluk sederhana untuk melihat pewarisan method secara langsung! Kamu akan membuat parent class Animal dan child class Dog, lalu menunjukkan bahwa instance Dog dapat menggunakan method yang hanya didefinisikan di Animal.
Kamu akan menyusun kodemu dalam tiga file:
Animal.lua: Definisikan parent class dengan pola class standar. Sertakan constructor:new(name)yang menyimpan nama hewan, dan method:speak()yang mencetak nama hewan diikutimakes a sound. Kembalikan class di akhir file.Dog.lua: Definisikan child class yang mewarisi Animal. Muat module Animal dan siapkan tautan pewarisan agar Dog dapat mengakses method Animal. Sertakan constructor:new(name)yang menyimpan nama dan menetapkan Dog sebagai metatable. Class Dog TIDAK boleh mendefinisikan method:speak()sendiri. Method ini akan diwarisi dari Animal.main.lua: Muat module Dog, baca nama dari input, buat instance Dog dengan nama tersebut, lalu panggil method:speak()pada instance itu.
Kamu akan menerima satu input: nama anjing.
Contohnya, jika input-nya Buddy, output-nya adalah:
Buddy makes a soundHal menariknya, class Dog tidak pernah mendefinisikan :speak(), tetapi pemanggilannya pada instance Dog tetap berfungsi dengan baik. Lua mengikuti rantai pencarian dari instance Dog ke class Dog, lalu ke class Animal, tempat method tersebut ditemukan. Inilah pewarisan!
Coba sendiri
-- main.lua: Titik masuk
local Dog = require('Dog')
-- Baca nama anjing dari input
local name = io.read()
-- TODO: Buat instance Dog dengan nama yang diberikan
-- TODO: Panggil method :speak() pada instance Dog
Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua pelajaran di Pemrograman Berorientasi Object
1Konsep "Self"
Tabel dengan Fungsi'self' EksplisitSintaks Titik DuaTitik vs Titik DuaRangkuman, Titik Bergerak4Proyek: Bank Digital
Penyiapan Proyekmethod Setoran7Polimorfisme & Overriding
Menimpa methodMemanggil method indukDuck TypingAntarmuka UmumMemeriksa TipeRingkasan: Peran Karyawan10Proyek: Pengelola Bentuk
Penyiapan Proyekclass Rectangleclass Circlemethod KelilingKumpulan BentukLuas TotalSaring Bentuk2Pola Prototype untuk class
Konsep PrototypeMenghubungkan dengan __indexKonstruktor :new()Menginisialisasi AtributInstans yang MandiriRangkuman: Pabrik Mobil5Pembebanan Operator dalam OOP
Menjumlahkan ObjekMengurangkan ObjekMenggabungkan ObjekMembandingkan Objek (<, >)Ulasan: Aritmetika Dompet8Enkapsulasi
Konvensi PenamaanClosure untuk PrivasiAkses melalui ClosureTabel Hanya-BacaLogika ValidasiRangkuman: Brankas Aman11Pola Desain (Ringan)
Fungsi FactoryTabel SingletonPola IteratorObserver (Listener)Rangkuman, Factory Logger3State dan Behavior pada object
Variabel InstansGetter methodSetter methodProperty TerhitungMemformat stringPemeriksaan KesetaraanRangkuman: Nilai Siswa6Dasar-Dasar Pewarisan
Menyiapkan PewarisanMewarisi methodMemperluas KonstruktorMenambahkan method untuk ChildSama vs UnikRangkuman: Hierarki BentukLatihan sendiri: Compiler Lua online