Alt Sınıf Metotları Ekleme
Coddy'nin Lua Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 34 / 70.
Kalıtım, alt sınıfların üst sınıf yöntemlerine erişmesini sağlar; ancak asıl güç, yalnızca alt sınıfa ait olan yeni yöntemler eklemekten gelir. Bir Dog, bir Animal'ın yapabildiği her şeyi yapabilir; ayrıca havlamak gibi köpeklere özgü şeyleri de yapabilir.
Çocuğa özgü bir yöntem eklemek basittir: yöntemi çocuk sınıf tablosunda tanımlamanız yeterlidir. Örnekler önce kendi sınıflarında yöntemleri aradığından, üst sınıfı etkilemeden yeni yöntemi bulurlar.
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, Animal'dan miras alır
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
-- Yalnızca Dog'da yeni metot
function Dog:bark()
print(self.name .. " says: Woof!")
endArtık Dog örnekleri hem miras alınan hem de kendilerine özgü yöntemleri kullanabilir:
local buddy = Dog:new("Buddy")
buddy:breathe() -- Çıktı: Buddy nefes alıyor (miras alınan)
buddy:bark() -- Çıktı: Buddy diyor ki: Woof! (yalnızca çocuk)Üst sınıf değişmeden kalır: sıradan bir Animal üzerinde :bark() çağrısı başarısız olur, çünkü bu yöntem orada mevcut değildir. Kalıtım, ortak işlevselliği tek bir yerde tutarken davranışı özelleştirmenizi böyle sağlar.
Görev
KolayKedilerin kendilerine özgü özel bir yeteneğe sahip olduğu bir evcil hayvan hiyerarşisi oluşturalım! Bir Pet üst sınıfı ve bir Cat alt sınıfı oluşturacaksın; Cat, Pet'teki her şeyi miras alacak, ancak yalnızca kedilerin yapabildiği benzersiz bir yönteme de sahip olacak.
Kodunu üç dosyada düzenleyeceksin:
Pet.lua: Evcil hayvanın adını depolayan:new(name)oluşturucusuna sahip üst sınıfını tanımla. Evcil hayvanın adını ve ardındansays helloifadesini yazdıran bir:greet()yöntemi ekle. Standart sınıf yapısını oluştur ve sınıfı döndür.Cat.lua: Pet'ten miras alan alt sınıfını tanımla. Cat sınıfının:new(name)oluşturucusu, adı başlatmak için üst sınıf oluşturucusunu çağırmalı, ardından metatablosunu Cat'e yeniden bağlamalıdır. Kedinin adını ve ardındanpurrs contentedlyifadesini yazdıran, alt sınıfa özgü bir:purr()yöntemi ekle. Bu yöntem yalnızca Cat içinde bulunur: Pet'te yoktur!main.lua: Cat modülünü içe aktar, girdiden bir ad oku, bir Cat örneği oluştur ve hem miras alınan:greet()yöntemini hem de kendine özgü:purr()yöntemini kullanabildiğini göster.
Bir girdi alacaksın: kedinin adı.
Ana dosyanda, verilen adla bir Cat oluştur, ardından ayrı satırlarda :greet() ve :purr() yöntemlerini çağır.
Örneğin girdi Whiskers ise çıktı şöyle olmalıdır:
Whiskers says hello
Whiskers purrs contentedlyİlk satır, Pet içinde tanımlanan miras alınmış :greet() yönteminden gelir; ikinci satır ise yalnızca Cat içinde bulunan :purr() yönteminden gelir. Bu, alt sınıfların üst sınıflarının yapabildiği her şeyi ve ayrıca kendilerine özgü özel davranışları gerçekleştirebildiğini gösterir!
Kendin dene
-- main.lua: Bir Cat oluştur ve kalıtımı göster
local Cat = require('Cat')
-- Kedinin adını girdiden oku
local name = io.read()
-- TODO: Verilen adla bir Cat örneği oluştur
-- TODO: Kalıtılan :greet() metodunu çağır (Pet'ten)
-- TODO: Cat'e özgü :purr() metodunu çağır
Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
Nesne Yönelimli Programlama bölümündeki tüm dersler
1'Self' Kavramı
Fonksiyonlu TablolarAçık 'self'İki Nokta SözdizimiNokta vs İki NoktaÖzet - Hareket Eden Nokta4Proje: Dijital Banka
Proje KurulumuPara Yatırma Metodu7Çok Biçimlilik ve Geçersiz Kılma
Metotları Geçersiz KılmaÜst Sınıf Metotlarını ÇağırmaDuck TypingOrtak ArayüzTür KontrolüÖzet - Çalışan Rolleri2Sınıf Prototip Kalıbı
Prototip Kavramı__index ile Bağlama:new() KurucusuÖznitelikleri BaşlatmaBağımsız ÖrneklerÖzet - Araba Fabrikası5OOP'de Operatör Aşırı Yükleme
Nesneleri ToplamaNesneleri ÇıkarmaNesneleri BirleştirmeNesneleri Karşılaştırma (<, >)Özet - Cüzdan Matematiği8Kapsülleme
Adlandırma KurallarıGizlilik için Closure'larClosure'lar Aracılığıyla ErişimSalt Okunur TablolarDoğrulama MantığıÖzet - Güvenli Kasa11Tasarım Kalıpları (Lite)
Fabrika FonksiyonlarıSingleton TablosuIterator KalıbıObserver (Dinleyici)Özet - Logger Fabrikası3Nesne Durumu ve Davranışı
Örnek DeğişkenleriGetter MetotlarıSetter MetotlarıHesaplanmış ÖzelliklerString BiçimlendirmeEşitlik KontrolleriÖzet - Öğrenci Notu6Kalıtımın Temelleri
Kalıtım KurulumuMetot KalıtımıConstructor'ı GenişletmeAlt Sınıf Metotları EklemePaylaşılan ve BenzersizÖzet - Şekil HiyerarşisiKendi başına pratik yap: Online Lua derleyicisi