Байни ҳатмии статикӣ ва динамикӣ дар Java фарқиятҳои зиёд мавҷуданд, аммо муҳимтар аз ҳама он аст, ки JVM онҳоро чӣ гуна истифода мебарад. Оё шумо ягон бор дар ҳайрат шудаед, ки чӣ тавр JVM қарор мекунад, ки кадом усулро даъват кунад, вақте ки зиёда аз як усул бо ҳамон ном дар миқёс мавҷуд аст? Агар шумо ягон бор усули изофаборкунӣ ё бекоркуниро истифода карда бошед, шумо медонед, ки дар Java шумо метавонед якчанд усулҳоро бо ҳамон ном дошта бошед. Дар мавриди Java, JVM барои интихоби усули дилхоҳ ҳам пайвастагии статикӣ ва динамикӣ истифода мебарад.
Намунаи пайвастагии статикӣ ва динамикӣ дар Java
Дар ин барнома, шумо хоҳед дид, ки ҳатмии усулҳои виртуалӣ дар вақти компилясия бо истифода аз ҳатмии статикӣ ба амал намеояд, зеро ин усулро аз суперкласс даъват мекунад, чуноне ки бо усулҳои статикӣ, ки барвақт баста мешаванд. Агар усул аз зерсинф даъват карда шавад, an objectи мушаххас барои пайваст кардани функсия дар вақти иҷро истифода мешуд ва аз ин рӯ барои пайваст кардани функсияҳои виртуалӣ пайвасти динамикӣ истифода мешавад.
publicclassMain{publicstaticvoidmain(String[] args){// Пример статического и динамического связывания в JavaInsurance current =newCarInsurance();// Динамическое связывание на основе an objectint premium = current.premium();// Статическое связывание на основе классаString category = current.category();System.out.println("premium : "+ premium);System.out.println("category : "+ category);}}classInsurance{publicstaticfinalint LOW =100;publicintpremium(){return LOW;}publicstaticStringcategory(){return"Insurance";}}classCarInsuranceextendsInsurance{publicstaticfinalint HIGH =200;publicintpremium(){return HIGH;}publicstaticStringcategory(){return"Car Insurance";}}
Результаты выполнения:
premium :200
category :Insurance
Тавре ки шумо мебинед, занги методӣ premium()ба иҷрои метод аз зерсинф оварда расонд, дар ҳоле ки занги методӣ category()ба иҷрои усули суперкласс оварда расонд. Сабаб дар он аст, ки premium()- як усули виртуалӣ аст, ки бо истифода аз ҳатмии дер ҳал карда мешавад, дар ҳоле ки category()- як усули статикӣ аст, ки бо истифода аз ҳатмии статикӣ бо номи синф ҳал карда мешавад.
GO TO FULL VERSION