Бұл қызықты және маңызды сұрақ менің оқырмандарымның біріне Java әзірлеушісі лауазымына телефон арқылы сұхбат кезінде қойылды. Ол Java тілінде абстрактілі класс жасау
Көптеген Java әзірлеушілері бұл сұраққа жауап беру кезінде сөздікке байланысты шатастырады. Сұрақ қойған адам жалпы ұғыммен таныс болса да, ол класс ондағы абстрактілі әдісті жариялағаннан кейін абстрактілі болатынын және
Блокнот бағдарламасында осы codeты теріп, оны пәрмен жолындағы javac утorтасын пайдаланып құрастырсаңыз, дәл солай болады. Java спецификацияларына сәйкес, класс ішінде абстрактілі әдісті жариялаған бойда ол класс абстрактілі сыныпқа айналады және
final
мүмкін емес екенін білсе де , сұрақтың тұжырымы оны шатастырды. Жауап қарапайым: жоқ, final
-сыныпта дерексіз әдістер болуы мүмкін емес. Неліктен? Өйткені Java тілінің сыныбында дерексіз әдісті жариялаған бойда бұл класс автоматты түрде абстрактілі болады және final
Java тілінде абстрактілі класс жасай алмайсыз. Бұл Java -сыныпта дерексіз әдістер final
болуы мүмкін емес дегенді білдіреді.
final
Java тілінде абстрактілі класс жасай алмайтынын түсінбеуі мүмкін. Бұл тармақ бұл сұрақты жиі қойылатын және жиі қойылатын сұрақтан бөледі: Java-да сыныпты бір уақытта абстрактілі және қорытынды деп жариялау мүмкін бе? final
-сыныпта дерексіз әдісті жариялау мүмкін емес екенін көрсету үшін codeтың бір мысалын қарастырайық . Бізге абстрактілі әдісі бар класс Hello.java
шақырайық . public final
Hello
print()
public final class Hello {
public abstract void print();
}
Бұл codeты IDE-ге теріңіз, сіз келесі қате туралы хабарды аласыз, олар Hello
абстрактілі әдістерді онда жариялау үшін абстрактілі класс болуы керек дейді.
final
Java тілінде дерексіз класс жасай алмайтындықтан, компилятор қате жасайды. Бұл Java тіліндегі жоғарғы деңгейлі сыныптарға да, кірістірілген сыныптарға да қатысты. Кірістірілген -сыныпта дерексіз әдісті жарияласаңыз да final
, қате бірдей болады. Тағы бір қатысты сұрақ: Java-дағы дерексіз сыныпта статикалық әдістер болуы мүмкін бе? Жауап: иә, олар мүмкін, абстрактілі сыныпта статикалық әдісті жариялауда ешқандай проблема жоқ, өйткені статикалық әдісті пайдалану үшін класс данасын жасаудың қажеті жоқ, оларды жай сынып атауы арқылы шақыруға болады. Төменде көрсетілгендей Java тілінде статикалық болып табылатын классқа Hello
әдісті қосу үшін мысалды өзгерте аламыз :main()
public abstract class Hello {
public abstract void print();
public static void main(String args[]) {
// Howой-то code
}
}
Көріп отырғаныңыздай, компиляция қатесі жіберілмейді. Бұл code еш қиындықсыз құрастырылады, өйткені Java-да абстрактілі сыныпта статикалық әдісті толығымен қауіпсіз жариялауға болады. Қысқаша қорытындылар -сыныпта дерексіз әдісті жариялау мүмкін емес final
. Өйткені мұны жасағаннан кейін класс Java сипаттамаларына сәйкес автоматты түрде дерексіз болады. final
Java тіліндегі -сынып дерексіз болуы мүмкін емес болғандықтан , бұл қабылданбайды және компилятор қате жіберу арқылы мұны істеуге тыйым салады. Бірақ сіз статикалық әдістерді қорытынды және дерексіз сабақтарда жариялай аласыз, бұл мәселеде ешқандай проблемалар жоқ.
GO TO FULL VERSION