JavaRush /Блоги Java /Random-TG /Савол ва Ҷавоб: Оё дар синфи ниҳоӣ усулҳои абстрактиро му...

Савол ва Ҷавоб: Оё дар синфи ниҳоӣ усулҳои абстрактиро муайян кардан мумкин аст?

Дар гурӯҳ нашр шудааст
Ин саволи ҷолиб ва муҳим ба яке аз хонандагони ман ҳангоми мусоҳибаи телефонӣ барои вазифаи таҳиягари Java дода шуд. Ҳарчанд ӯ медонист, ки дар забони Java синфҳои абстрактӣ сохтанfinal ғайриимкон аст , аммо аз навиштани савол ӯ дар иштибоҳ афтод. Ҷавоб оддӣ аст: не, finalдар синф усулҳои абстрактӣ буда наметавонанд. Чаро? Зеро вақте ки шумо усули абстрактиро дар синфи забони Java эълон мекунед, ин синф ба таври худкор абстрактӣ мешавад ва finalшумо наметавонед дар забони Java синфи абстрактӣ созед. Ин маънои онро дорад, ки дар Java -синфи усулҳои абстрактӣ finalвуҷуд надоранд .
Савол ва Ҷавоб: Оё дар синфи ниҳоӣ усулҳои абстрактиро муайян кардан мумкин аст?  - 1
Бисёре аз таҳиягарони Java ҳангоми ҷавоб додан ба ин савол аз сабаби ибора ошуфта мешаванд. Ҳатто агар шахсе, ки савол додааст, бо мафҳуми умумӣ ошно бошад ҳам, ӯ шояд дарк накунад, ки синф пас аз эълон кардани усули абстрактӣ дар он абстрактӣ мешавад ва finalшумо наметавонед дар Java синфи абстрактӣ созед. Ин нукта ин саволро аз саволи маъмултарин ва зуд-зуд пурсидашаванда ҷудо мекунад: оё дар Java имконпазир аст, ки синфро ҳамзамон абстрактӣ ва ниҳоӣ эълон кунад? Биёед як рамзи мисолро дида бароем, то нишон диҳем, ки finalдар -синф эълон кардани усули абстрактӣ имконнопазир аст. Биёед як синф бо номи худ Hello.javaдошта бошем , ки усули абстрактӣ дорад . public finalHelloprint()
public final class Hello {
  public abstract void print();
}
Ин codeро ба IDE ворид кунед, шумо паёми хатогии зеринро хоҳед гирифт, онҳо мегӯянд, ки Helloон бояд синфи абстрактӣ бошад, то дар он усулҳои абстрактӣ эълон карда шаванд.
Савол ва Ҷавоб: Оё дар синфи ниҳоӣ усулҳои абстрактиро муайян кардан мумкин аст?  - 2
Савол ва Ҷавоб: Оё дар синфи ниҳоӣ усулҳои абстрактиро муайян кардан мумкин аст?  - 3
Ҳамин чиз рӯй медиҳад, агар шумо ин codeро дар Notepad ворид кунед ва онро бо истифода аз утorтаи javac аз сатри фармон тартиб диҳед. Тибқи мушаххасоти Java, вақте ки шумо усули абстрактиро дар дохor синф эълон мекунед, он синф ба синфи абстрактӣ табдил меёбад ва азбаски шумо finalнаметавонед дар Java синфи абстрактӣ созед, компилятор хато эҷод мекунад. Ин ҳам барои синфҳои сатҳи боло ва ҳам синфҳои лона дар забони Java дуруст аст. Ҳатто агар шумо усули абстрактиро дар finalсинфи лона эълон кунед, хатогӣ ҳамон хоҳад буд. Саволи дигари марбут ин аст: оё синфи абстрактӣ дар Java усулҳои статикӣ дошта метавонад? Ҷавоб: бале, онҳо метавонанд, дар эълони усули статикӣ дар синфи абстрактӣ мушкиле вуҷуд надорад, зеро барои истифодаи усули статикӣ ба шумо лозим нест, ки намунаи синф эҷод кунед, онҳоро метавон танҳо бо истифода аз номи синф даъват кард. Мо метавонем мисоли худро тағир диҳем, то Helloметодеро ба синф дохил кунем main(), ки дар Java статикӣ аст, тавре ки дар зер нишон дода шудааст:
public abstract class Hello {
  public abstract void print();
  public static void main(String args[]) {
     // Howой-то code
  }
}
Тавре ки шумо мебинед, ҳеҷ гуна хатогӣ дар тартиб дода намешавад. Ин code бе мушкилот тартиб дода мешавад, зеро дар Java шумо метавонед усули статикиро дар синфи абстрактӣ комилан бехатар эълон кунед. Хулосаҳои мухтасар Дар -синф эълон кардани усули абстрактӣ ғайриимкон аст final. Зеро вақте ки шумо ин корро мекунед, синф мувофиқи мушаххасоти Java ба таври худкор абстрактӣ мешавад. Ва азбаски final-класс дар Java абстрактӣ буда наметавонад, ин ғайри қобor қабул аст ва компилятор бо гузоштани хато ба шумо ин корро манъ мекунад. Аммо шумо метавонед усулҳои статикиро ҳам дар синфҳои ниҳоӣ ва ҳам дар дарсҳои абстрактӣ эълон кунед, бо ин мушкилот вуҷуд надорад.
Шарҳҳо
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION