Metodların yüklənməsi
Və bugünkü digər maraqlı mövzu — metodların yüklənməsi. Və ya çox vaxt buna overloading (yenidən təyin etmə — bu overriding) deyilir.
Yenidən təyin etmədən fərqli olaraq, yüklənmə — olduqca sadə əməliyyatdır. Əslində, bu, metodlarla bağlı bir əməliyyat belə deyil, baxmayaraq ki, çox vaxt bunu qorxunc bir ifadə ilə adlandırırlar — parametrik polimorfizm.
Məsələ burasındadır ki, sinif daxilindəki bütün metodlar unikal adlara malik olmalıdır. Bax, bu belə deyil. Daha doğrusu, ümumiyyətlə belə deyil. Metod unikal ada malik olmamalıdır. Unikal olmalıdır metodun adı və parametrlərinin tiplərinin birləşməsidir. Belə birləşmələrə həmçinin metodların siqnaturaları da deyilir.
Nümunələr:
Kod | Təsvir |
---|---|
|
Belə etmək olar. İki metod unikal adlara malikdir. |
|
Belə də etmək olar. İki metod unikal adlara (siqnaturalara) malikdir. |
|
Hələ də unikal metodlar |
|
Belə etmək isə olmaz. Metodlar — unikal deyil. Tipləri fərqli olsa belə. |
|
Belə isə — olar. Metodların parametrləri unikaldır. |
Siqnaturaya daxildir: metodun adı və parametrlərin tipləri. Daxil deyil: metodun nəticə tipi və parametrlərin adları. Sinifdə eyni siqnaturaya malik iki metod ola bilməz: kompilyator hansı metodun çağrılacağını anlaya bilməz.
Parametrlərin adları əhəmiyyət daşımır : onlar kompilyasiya zamanı itirilir. Kompilyasiyadan sonra metod haqqında yalnız adı və parametrlərin tipləri məlumdur. Nəticə tipi itməsə də, funksiya nəticəsini nəyəsə təyin etmək zəruri deyil, buna görə də onu siqnaturaya daxil etmirlər.
OOP prinsiplərinə görə, polimorfizm — müxtəlif realizasiyaların bir interfeys arxasında gizlədilməsidir. Və məsələn, System.out.println()
metodunun çağırılmasında, parametrlərdən asılı olaraq müxtəlif metodlar çağırıldığından, bu formal olaraq polimorfizm tərifinə uyğun gəlir.
Məhz buna görə də, bir sinifdə eyni ada malik müxtəlif metodlar, zəif də olsa, polimorfizmin bir forması hesab olunur.
GO TO FULL VERSION