JavaRush /Java блогы /Random-KK /Сұрақ-жауап: Қорытынды сыныпта абстрактілі әдістерді анық...

Сұрақ-жауап: Қорытынды сыныпта абстрактілі әдістерді анықтауға болады ма?

Топта жарияланған
Бұл қызықты және маңызды сұрақ менің оқырмандарымның біріне Java әзірлеушісі лауазымына телефон арқылы сұхбат кезінде қойылды. Ол Java тілінде абстрактілі класс жасауfinal мүмкін емес екенін білсе де , сұрақтың тұжырымы оны шатастырды. Жауап қарапайым: жоқ, final-сыныпта дерексіз әдістер болуы мүмкін емес. Неліктен? Өйткені Java тілінің сыныбында дерексіз әдісті жариялаған бойда бұл класс автоматты түрде абстрактілі болады және finalJava тілінде абстрактілі класс жасай алмайсыз. Бұл Java -сыныпта дерексіз әдістер finalболуы мүмкін емес дегенді білдіреді.
Сұрақ-жауап: Қорытынды сыныпта абстрактілі әдістерді анықтауға болады ма?  - 1
Көптеген Java әзірлеушілері бұл сұраққа жауап беру кезінде сөздікке байланысты шатастырады. Сұрақ қойған адам жалпы ұғыммен таныс болса да, ол класс ондағы абстрактілі әдісті жариялағаннан кейін абстрактілі болатынын және finalJava тілінде абстрактілі класс жасай алмайтынын түсінбеуі мүмкін. Бұл тармақ бұл сұрақты жиі қойылатын және жиі қойылатын сұрақтан бөледі: Java-да сыныпты бір уақытта абстрактілі және қорытынды деп жариялау мүмкін бе? final-сыныпта дерексіз әдісті жариялау мүмкін емес екенін көрсету үшін codeтың бір мысалын қарастырайық . Бізге абстрактілі әдісі бар класс Hello.javaшақырайық . public finalHelloprint()
public final class Hello {
  public abstract void print();
}
Бұл codeты IDE-ге теріңіз, сіз келесі қате туралы хабарды аласыз, олар Helloабстрактілі әдістерді онда жариялау үшін абстрактілі класс болуы керек дейді.
Сұрақ-жауап: Қорытынды сыныпта абстрактілі әдістерді анықтауға болады ма?  - 2
Сұрақ-жауап: Қорытынды сыныпта абстрактілі әдістерді анықтауға болады ма?  - 3
Блокнот бағдарламасында осы codeты теріп, оны пәрмен жолындағы javac утorтасын пайдаланып құрастырсаңыз, дәл солай болады. Java спецификацияларына сәйкес, класс ішінде абстрактілі әдісті жариялаған бойда ол класс абстрактілі сыныпқа айналады және finalJava тілінде дерексіз класс жасай алмайтындықтан, компилятор қате жасайды. Бұл 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 сипаттамаларына сәйкес автоматты түрде дерексіз болады. finalJava тіліндегі -сынып дерексіз болуы мүмкін емес болғандықтан , бұл қабылданбайды және компилятор қате жіберу арқылы мұны істеуге тыйым салады. Бірақ сіз статикалық әдістерді қорытынды және дерексіз сабақтарда жариялай аласыз, бұл мәселеде ешқандай проблемалар жоқ.
Пікірлер
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION