Inheritance ni nini?
Hiki ni kitendo kuwa class moja inarithi property na method kutoka class nyingine. Hii inayorithi itaitwa child class yaani class toto. Katika kurithi huku tutazingatia access modifier, hivyo basi tutarithi method na property ambazo ni public au protected. Class ambayo inayorithi (inherited) huongezewa keyword extends wakati wa kuitengeneza.
Mfano:
<?php
class Gari {
}
class prado extends Gari {
}
?>
Hapo class Gari huitwa parent class na hiyo class prado huitwa child class. Sasa ngoja tuone namna ambavyo tunaweza kurithi method na property ambazo ni public ama protected.
<?php
class Gari
{
public $jina;
protected $speed;
public function __construct($jina, $speed)
{
$this->jina = $jina;
$this->speed = $speed;
}
protected function tangazo()
{
echo "Tunauza {$this->jina} yenye speed ya {$this->speed}.";
}
}
class Prado extends Gari
{
public function tangazo_jipya()
{
//method tangazo ni protected
$this->tangazo();
}
}
$Toyota = new Prado("Toyota", "180 km/h");
$Toyota->tangazo_jipya();
?>
Hapo utaona method tangazo() ni protected lakini tumeweza kuitumia kwenye child class prado(). Hii ni kwa sababu class Prado() imerithi property na method kutoka kwenye parent class Gari().
Kwa kutumia mfabo huo hata property ikiwa ni protected unaweza kuitumia ndani ya child class bila ya wasi wasi wowote.
Hapo kuna kitu kipya umekiona {$this->jina} umeona hapo tumetumia mabano {} haya hapo yametumika ili tuweze kutumia hizo property kwenye string. Hii kitaalamu inaitwa string interpolation. Angalia mfano mmoja hapo chini
<?php
$x = 4;
$b = 6;
$z = $x +$b;
echo "jumala ya {$x} na {$b} ni {$z}";
jumala ya 4 na 6 ni 10
Overriding inherited method
Sasa kuna hii concept hapa tunapasa kuijuwa. Ni kuwa endapo method utaitenegeza upya kwenye child class basi method ya mwanzo itakuwa imebadilishwa. Hapo ndio tunaita overriding method.
Angalia mfano hapo chini method tangazo tunakwenda kuitumia tenda kwenye method tangazo jipya hapo. Hivyo method tangazo ya kwenye parent class haitoweza kutumika tenda kwenye hii child class, inamaana tumeibadilishia value. Kitu cha kuzingatia ili uweze ku override method inatakiwa zifanane jina.
<?php
class Gari
{
public $jina;
protected $speed;
public function __construct($jina, $speed)
{
$this->jina = $jina;
$this->speed = $speed;
}
protected function tangazo()
{
echo "Tunauza {$this->jina} yenye speed ya {$this->speed}.";
}
}
class Prado extends Gari
{
public function tangazo()
{
echo "Tunatenegeneza gari aina ya {$this->jina} yenye speed ya {$this->speed}.";
}
}
$Toyota = new Prado("Toyota", "180 km/h");
$Toyota->tangazo();
?>
Utaona hapo itaprint tangazo la kutengeneza gari na sio la kuuza gari ingawa method zote zina jina la tangazo lakini tangazo la kwanza tgume li override kwa tangazo la pili kwa kutumia jina moja.
Jinsi ya kuzuia overriding:
Sasa wakati mwingine itahitakjika uzuie ku ovverride kwa sababu za kiusalama. Ina maana kama utazuia override basi endapo uta override program itakupa error. Sasa ukitaka kuzuia override utatumia keyword final wakati wa kutenegeneza class. Mfano
<?php
final class Gari{
}
Sasa hapo kama uta override propert kwenye extended class utapata error kwa kuwa parent class imezuia ku override. Angalia mfano hapo chini:-
<?php
final class Gari{
protected function tangazo(){
echo "tunauza gari";
}
}
class prado extends Gari{
function tangazo()
{
echo "tunatengeneza gari";
}
}
Hizo code hapo uki run zitakupa error kwa sababu umejaribu ku override method tangazo kutoka kwenye paren class ambayo imezuia ku override.
Mwisho
Katika somo linalofuata tutakwenda kujifunza kuhusu constat kwenye OOP