JavaRush /Блоги Java /Random-TG /Фарқи байни ин ва калимаҳои калидӣ дар Java
grishin
Сатҳи
Харьков

Фарқи байни ин ва калимаҳои калидӣ дар Java

Дар гурӯҳ нашр шудааст
thisва superду калимаи махсуси калидӣ дар Java мебошанд, ки мутаносибан намунаи кунунии синф ва суперкласси онро ифода мекунанд. Барномасозони Java аксар вақт ин калимаҳоро ошуфта мекунанд ва дар бораи хосиятҳои махсуси онҳо, ки аксар вақт дар мусоҳибаҳои Java Core пурсида мешаванд, огоҳии кам нишон медиҳанд. Масалан, якчанд саволе, ки дарҳол ба хотир меоянд, дар бораи thisва super, Оё мумкин аст, ки ба калимаи калидӣ thisдар Java маънои дигар таъин карда шавад? ва фарқияти байни калимаҳои калидӣ thisва superJava чӣ гуна аст. Намедонам? Хуб, ман дар ин ҷо ҷавоб намедиҳам - онро дар охири мақола пайдо кардан мумкин аст. Фарқи байни ин ва калимаҳои калидӣ дар Java - 1Ҳамин тавр, тавре ки ман дар ибтидо гуфтам, фарқи асосии байни thisJava superдар он аст, ки thisнамунаи кунунии синф намояндагӣ мекунад, дар ҳоле ки superнамунаи кунунии синфи волидайн намояндагӣ мекунад. Ин аст як мисоли истифодаи тағирёбандаҳо thisва super- шумо эҳтимол аллакай мисолҳои даъват кардани конструкторҳоро аз дигаре дидаед, ки ба истилоҳ. даъвати конструкторҳо дар як занҷир, ин тавассути истифодаи калимаҳои калидӣ thisва имконпазир аст super. Дар дохor синф барои даъват кардани созандаи беаргументи он истифода мешавад this(), дар ҳоле ки super()он барои даъват кардани созандаи беаргумент ё тавре ки онро низ меноманд, созандаи пешфарзи синфи волидайн истифода мешавад. Воқеан, бо ин роҳ шумо метавонед на танҳо конструкторро бидуни аргумент, балки ягон конструктори дигарро низ бо додани параметрҳои мувофиқ даъват кунед. Мо ба зудӣ мисоли ин thisистифодаро мебинем super. Инчунин дар thisJava superонҳо барои дастрасӣ ба тағирёбандаҳои мисоли синф ва волидайни он истифода мешаванд. Дар асл, ба онҳо бе пешояндҳои superва дастрас шудан мумкин аст this, аммо танҳо агар дар блоки ҷорӣ чунин тағирёбандаҳо бо дигар тағирёбандаҳо мувофиқат накунанд, яъне. агар он дорои тағирёбандаҳои маҳаллӣ бо ҳамон номҳо набошад, дар акси ҳол шумо бояд номҳоро бо префикс истифода баред, аммо ин муҳим нест, зеро дар ин шакл боз хам бештар хониш мешаванд. Намунаи классикии ин равиш истифодаи он thisдар дохor созанда мебошад, ки параметреро бо ҳамон ном бо тағирёбандаи мисол мегирад. Баъдтар дар мақола мо мефаҳмем, ки байни superва чӣ фарқиятҳои дигар мавҷуданд thisва ба баъзе мисолҳои истифодаи онҳо нигаред.

Чӣ тавр ин ва супер монанданд

Пеш аз он ки фарқияти байни калимаҳои калидӣ thisва super, биёед баъзе шабоҳатҳои онҳоро бубинем:
  1. Ҳарду thisва ҳам superтағирёбандаҳои ғайристатикӣ мебошанд, бинобар ин онҳоро дар контексти статикӣ истифода бурдан мумкин нест, яъне онҳоро дар усули асосӣ истифода бурдан мумкин нест. Ин боиси хатои вақти компиляция мегардад "ба тағирёбандаи ғайристатикӣ thisаз контексти статикӣ истинод кардан мумкин нест". Ҳамин чиз рӯй медиҳад, агар шумо калимаи калидиро дар усули асосӣ истифода баред super.

  2. Ҳарду this, ва superмумкин аст дар дохor созандаҳо барои даъват кардани конструкторҳои дигар дар занҷир истифода шаванд, масалан, this() ва super() мутаносибан бидуни далелҳои синфҳои меросгиранда ва волидайн ба созанда занг зананд.
Дар мисоли дар поён овардашуда, мо аввал зангро аз созандаи беаргументи синфи В ба конструктори ҳамон синфи В мерасонем, ки як параметри навъи навъи ро мегирад String, ки дар навбати худ super("")созандаи як аргументро аз суперкласс даъват мекунад.
class A{

    A(){
        System.out.println("Конструктор без аргументов класса A");
    }

    A(String args){
        System.out.println("Конструктор с одним аргументом класса A");
    }
}

class B extends A{

   B(){
        this(""); // вызов конструктора с одним аргументом класса B
        System.out.println("Конструктор без аргументов класса B");
    }

   B(String args){
        super(""); // вызов конструктора с одним аргументом класса A
        System.out.println("Конструктор с одним аргументом класса B");
    }
}

// Тест-класс и вывод
public class Test {

    public static void main(String args[]) {
       B b = new B();
    }

}
Натиҷа: Созандаи як аргументи синфи A Созандаи як аргументи синфи B Конструктори як аргументи синфи В
  1. Дар дохor конструктор this, ва superбояд дар аввал аз ҳама ибораҳои дигар пайдо шавад, вагарна компилятор паёми хатогӣ медиҳад. Аз ин бармеояд, ки як созанда наметавонад ҳарду this()ва -ро дар бар гирад super().

Тафовут байни супер ва ин

Акнун мо медонем, ки чӣ гуна калимаҳои калидиро истифода барем superва thisфаҳмем, ки чаро онҳо лозиманд. Аммо як варианти дигари истифодаи ин калимаҳои калидӣ вуҷуд дорад, ки ман зикр накардаам - дар синфҳои дохилӣ, ки дар он бо ёрии онҳо истинод ба синфи берунӣ бо истифода аз варақаи нотаҳои берунӣ хеле қулай аст. thisбарои мисоли ҳозираи он ва берунӣ. super- барои падару модараш. Фаромӯш накунед, ки берунро бо номи синфи берунӣ иваз кунед. Акнун биёед мухтасар фарқиятҳои асосии байни калимаҳои калидӣ thisваsuper
  1. тағирёбанда thisба мисоли ҷории синфе, ки дар он истифода мешавад, ишора мекунад, дар ҳоле ки он superба мисоли ҷории синфи волидайн ишора мекунад.

  2. Ҳар як созанда дар сурати мавҷуд набудани зангҳои возеҳ ба конструкторҳои дигар, ба таври ғайримустақим super()созандаи бе далели синфи волидии худро даъват мекунад, аммо шумо ҳамеша имкон доред, ки ба ягон созандаи дигар бо ё this(), ё super().
Эҳтимол ин ҳама чизест, ки дар бораи фарқияти байни калимаҳои калидӣ thisва superJava ва чӣ гуна истифода шудани онҳо дар барномаҳо гуфтан мумкин аст. Тавре ки мо дидем, ҳадафи асосии онҳо даъват кардани як конструктор аз дигараш ва истинод ба тағирёбандаҳои мисоли дар синфи ҷорӣ ва синфи волидайни он эълоншуда мебошад. Фаромӯш накунед, ки инҳо тағирёбандаҳои оддӣ нестанд ва ҳоло - ҷавоб ба саволи ман, ки ман дар сархати аввал пурсидам. Не, ба тағирёбанда thisқимати нав таъин карда намешавад, зеро он ниҳоӣ эълон шудааст. Шумо метавонед ин корро дар IDE иҷро кунед - шумо хатои ҷамъоварӣ хоҳед гирифт "шумо наметавонед ба тағирёбанда арзиши нав таъин кунед this- он ниҳоӣ эълон шудааст." Мақолаи аслӣ дар ин ҷо .
Шарҳҳо
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION