Menambahkan method untuk Child
Termasuk bagian Pemrograman Berorientasi Object dalam perjalanan Lua di Coddy. Pelajaran 34 dari 70.
Inheritance memungkinkan child class mengakses method parent, tetapi kekuatan sebenarnya berasal dari penambahan method baru yang hanya dimiliki child. Dog dapat melakukan semua yang dapat dilakukan Animal, ditambah hal-hal unik bagi anjing, seperti menggonggong.
Menambahkan method khusus untuk child itu mudah: cukup definisikan method tersebut pada tabel class child. Karena instance mencari method terlebih dahulu di class-nya sendiri, instance akan menemukan method baru itu tanpa memengaruhi parent.
local Animal = {}
Animal.__index = Animal
function Animal:new(name)
local obj = {name = name}
setmetatable(obj, Animal)
return obj
end
function Animal:breathe()
print(self.name .. " is breathing")
end
-- Dog mewarisi Animal
local Dog = {}
Dog.__index = Dog
setmetatable(Dog, {__index = Animal})
function Dog:new(name)
local obj = Animal.new(Animal, name)
setmetatable(obj, Dog)
return obj
end
-- method baru hanya ada di Dog
function Dog:bark()
print(self.name .. " says: Woof!")
endSekarang, instance Dog dapat menggunakan method yang diwarisi dan method unik:
local buddy = Dog:new("Buddy")
buddy:breathe() -- output: Buddy is breathing (diwarisi)
buddy:bark() -- output: Buddy says: Woof! (hanya milik class turunan)class induk tetap tidak berubah: pemanggilan :bark() pada Animal biasa akan gagal karena method itu tidak ada di sana. Inilah cara pewarisan memungkinkan kamu mengkhususkan perilaku sambil menjaga fungsionalitas bersama di satu tempat.
Tantangan
MudahMari buat hierarki hewan peliharaan tempat kucing memiliki kemampuan khususnya sendiri! Kamu akan membuat parent class Pet dan child class Cat. Cat mewarisi semua hal dari Pet, tetapi juga memiliki method unik yang hanya bisa dilakukan kucing.
Kamu akan mengatur kodemu dalam tiga file:
Pet.lua: Definisikan parent class dengan constructor:new(name)yang menyimpan nama hewan peliharaan. Sertakan method:greet()yang mencetak nama hewan peliharaan diikutisays hello. Siapkan pola class standar dan kembalikan class tersebut.Cat.lua: Definisikan child class yang mewarisi dari Pet. Constructor:new(name)milik Cat harus memanggil constructor parent untuk menginisialisasi nama, lalu menghubungkan kembali metatable ke Cat. Tambahkan method khusus child:purr()yang mencetak nama kucing diikutipurrs contentedly. Method ini hanya ada di Cat. Pet tidak memilikinya!main.lua: Wajibkan module Cat, baca nama dari input, buat instance Cat, lalu tunjukkan bahwa instance tersebut dapat menggunakan method warisan:greet()dan method uniknya sendiri,:purr().
Kamu akan menerima satu input: nama kucing.
Di file utama, buat Cat dengan nama yang diberikan, lalu panggil :greet() diikuti :purr() pada baris terpisah.
Misalnya, jika input-nya adalah Whiskers, output-nya adalah:
Whiskers says hello
Whiskers purrs contentedlyBaris pertama berasal dari method warisan :greet() yang didefinisikan di Pet, sedangkan baris kedua berasal dari method :purr() yang hanya ada di Cat. Ini menunjukkan bagaimana child class dapat melakukan semua hal yang dapat dilakukan parent-nya, ditambah perilaku khususnya sendiri!
Coba sendiri
-- main.lua: Buat Cat dan tunjukkan pewarisan
local Cat = require('Cat')
-- Baca nama kucing dari input
local name = io.read()
-- TODO: Buat instance Cat dengan nama yang diberikan
-- TODO: Panggil method :greet() yang diwarisi dari Pet
-- TODO: Panggil method :purr() khusus Cat
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