JavaRush /Java Blogu /Random-AZ /Sual və Cavab: Yekun sinifdə mücərrəd metodları müəyyən e...

Sual və Cavab: Yekun sinifdə mücərrəd metodları müəyyən etmək mümkündürmü?

Qrupda dərc edilmişdir
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ğınfinal mümkün olmadığını bilsə də , sualın ifadəsi onu çaşdırdı. Cavab sadədir: yox, finalsinifdə 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ə finalsiz Java dilində abstrakt sinif yarada bilməzsiniz. Bu o deməkdir ki, Java sinifində mücərrəd metodlar finalola bilməz .
Sual və Cavab: Yekun sinifdə mücərrəd metodları müəyyən etmək mümkündürmü?  - 1
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ə finalJava-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.javaBizə mücərrəd metodu olan public finaladlı bir sinfimiz olsun . Helloprint()
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, Hellobu, abstrakt sinif olmalıdır ki, abstrakt metodlar elan olunsun.
Sual və Cavab: Yekun sinifdə mücərrəd metodları müəyyən etmək mümkündürmü?  - 2
Sual və Cavab: Yekun sinifdə mücərrəd metodları müəyyən etmək mümkündürmü?  - 3
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 finalJava-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 Hellometodu 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 finalsinifdə 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 finalbu 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.
Şərhlər
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION