Menu
CoddyTech

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!")
end

Sekarang, 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.

challenge icon

Tantangan

Mudah

Mari 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 diikuti says 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 diikuti purrs 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 contentedly

Baris 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
quiz iconUji dirimu

Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.

Semua pelajaran di Pemrograman Berorientasi Object

Latihan sendiri: Compiler Lua online