Bu maraqlı və vacib sual Java developer vəzifəsi üçün telefonla müsahibə zamanı oxucularımdan birinə verildi. Java dilində mücərrəd sinif qurmağın
Bir çox Java tərtibatçıları bu suala cavab verərkən ifadələrə görə çaşqın olurlar. Sualı verən şəxs ümumi anlayışla tanış olsa belə, bir sinifin orada mücərrəd metodu elan etdikdən sonra mücərrədləşdiyini və
Bu kodu Notepad-a yazsanız və əmr satırından javac yardım proqramından istifadə edərək tərtib etsəniz, eyni şey baş verəcəkdir. Java spesifikasiyalarına görə, siz sinif daxilində mücərrəd metodu elan edən kimi həmin sinif mücərrəd sinifə çevrilir və siz
final
mümkün olmadığını bilsə də , sualın ifadəsi onu çaşdırdı. Cavab sadədir: yox, final
sinifdə mücərrəd üsullar ola bilməz. Niyə? Çünki Java dili sinfində mücərrəd metodu elan edən kimi bu sinif avtomatik olaraq abstrakt olur və final
siz Java dilində abstrakt sinif yarada bilməzsiniz. Bu o deməkdir ki, Java sinifində mücərrəd metodlar final
ola bilməz .
final
Java-da abstrakt sinif qura bilməyəcəyini dərk etməyə bilər. Bu məqam bu sualı daha ümumi və tez-tez verilən sualdan ayırır: Java-da sinfi eyni zamanda abstrakt və yekun elan etmək mümkündürmü? final
-classda mücərrəd metodu elan etməyin mümkün olmadığını nümayiş etdirmək üçün bir misal koda baxaq . Hello.java
Bizə mücərrəd metodu olan public final
adlı bir sinfimiz olsun . Hello
print()
public final class Hello {
public abstract void print();
}
Bu kodu IDE-yə yazın, aşağıdakı xəta mesajını alacaqsınız, deyirlər ki, Hello
bu, abstrakt sinif olmalıdır ki, abstrakt metodlar elan olunsun.
final
Java-da abstrakt sinif yarada bilməyəcəyiniz üçün kompilyator xəta yaradacaq. Bu həm Java dilində yuxarı səviyyəli siniflər, həm də yuvalanmış siniflər üçün doğrudur. İç içə-sinfdə mücərrəd metodu elan etsəniz belə final
, xəta eyni olacaq. Digər əlaqəli sual budur: Java-da mücərrəd sinifdə statik metodlar ola bilərmi? Cavab: bəli, edə bilərlər, mücərrəd sinifdə statik metodun elan edilməsində heç bir problem yoxdur, çünki statik metoddan istifadə etmək üçün sinfin nümunəsini yaratmağa ehtiyac yoxdur, onları sadəcə sinif adından istifadə etməklə çağırmaq olar. Aşağıda göstərildiyi kimi Java-da statik olan Hello
metodu sinfə daxil etmək üçün nümunəmizi dəyişdirə bilərik :main()
public abstract class Hello {
public abstract void print();
public static void main(String args[]) {
// Howой-то code
}
}
Gördüyünüz kimi heç bir kompilyasiya xətası atılmır. Bu kod problemsiz tərtib edilir, çünki Java-da mücərrəd sinifdə statik metodu tamamilə təhlükəsiz elan edə bilərsiniz. Qısa nəticələr Bir final
sinifdə mücərrəd metodu elan etmək mümkün deyil. Çünki siz bunu etdikdən sonra Java spesifikasiyasına uyğun olaraq sinif avtomatik olaraq abstrakt olur. Java-da -class mücərrəd ola bilmədiyi üçün final
bu qəbuledilməzdir və kompilyator xəta ataraq sizə bunu etməyi qadağan edəcək. Amma statik metodları həm yekun, həm də abstrakt dərslərdə elan edə bilərsiniz, bununla bağlı heç bir problem yoxdur.
GO TO FULL VERSION