1. Amma hələ bu hamısı deyil
Tutaq ki, Cow
sinfində printAll()
metodu var, hansı ki, iki başqa metodu çağırır. Onda kod belə işləyəcək:
Kod | Təsvir |
---|---|
|
|
|
Ekranda aşağıdakı yazı görünəcək: |
Diqqət yetirin: printAll()
metodu çağırıldıqda, hansı ki, Cow
sinfində yazılıb, Whale
tipli obyekt üçün printName
metodu Whale
sinfindən istifadə olunur, Cow
deyil.
Əsas məsələ metodun hansı sinifdə yazılması deyil, bu metodun çağırıldığı obyektin tipi (sinifi).
Yalnız static olmayan metodları miras almaq və yenidən təyin etmək olar. Static metodlar miras alınmır və buna görə də yenidən təyin edilmir.
Miras alınma və metodların yenidən təyini tətbiq edildikdən sonra Whale
sinfi belə görünür:
|
Miras alınma və metodların yenidən təyini tətbiq edildikdən sonra Whale sinfi belə görünür. Artıq köhnə printName metodu haqqında bir şey bilmirik. |
2. Tiplərin gətirilməsi
Burada daha maraqlı bir məqam var. Belə ki, sinif irsi olaraq ana sinfin bütün metodlarını və məlumatlarını alır, bu sinfin obyekti ana sinfin dəyişənlərində (və ana-ananın, və s., Object
sinfinə qədər) saxlanıla (təyin edilə) bilər. Misal:
Kod | Təsvir |
---|---|
|
Ekranda bu yazı görsənəcək: |
|
Ekranda bu yazı görsənəcək: |
|
Ekranda bu yazı görsənəcək: toString() metodu Object sinfindən miras alınıb |
Bu çox qiymətli xüsusiyyətdir: bir az sonra bunun praktikada necə istifadə ediləcəyini başa düşəcəksiniz.
3. Obyekt metodunun çağırılması
Bir dəyişənin metodu çağırıldıqda, real metod obyekt üzərində çağırılır. Bu mexanizm metodların dinamik dispetçerizasiyası adlanır.
Bu, necə görünür:
Kod | Təsvir |
---|---|
|
Ekranda bu yazı görsənəcək: |
|
Ekranda bu yazı görsənəcək: |
Nəzərə alın ki, hansı məhz printName()
metodu çağırılacaqsa, Cow
və ya Whale
sinfindən, dəyişənin tipi deyil, obyektin tipi təsir edir.
Cow
tipində dəyişəndə Whale
tipli obyektə istinad saxlanılır və Whale
sinfində təsvir edilmiş printName()
metodu çağırılacaq.
Bu o qədər də açıq-aşkar deyil. Əsas qaydanı yadda saxlayın:
Bir dəyişən üçün çağırıla bilən metodlar dəsti dəyişənin tipi ilə müəyyən edilir. Amma məhz hansı metod/hansı realizasiya çağırılacaqsa, bu, dəyişənin istinad saxladığı obyektin tipi/sinfi ilə müəyyən edilir.
Siz buna daim rast gələcəksiniz, ona görə də nə qədər tez yadda saxlasanız, bir o qədər yaxşıdır.
GO TO FULL VERSION