JavaRush /Java блогы /Random-KK /Бұл және Java тіліндегі супер кілт сөздер арасындағы айыр...
grishin
Деңгей
Харьков

Бұл және Java тіліндегі супер кілт сөздер арасындағы айырмашылық

Топта жарияланған
thisжәне superсәйкесінше сынып пен оның суперклассының ағымдағы данасын білдіретін Java тіліндегі екі арнайы кілт сөз. Java бағдарламашылары бұл сөздерді жиі шатастырады және Java Core сұхбаттарында жиі сұралатын олардың ерекше қасиеттері туралы аз хабардар етеді. Мысалы, бірден ойға келетін бір-екі сұрақ - thisжәне туралы, Java тіліндегі superкілт сөзге басқа мағына беруге бола ма ? және Java тіліндегі thisкілт сөздердің айырмашылығы неде . Білмеймін? Мен бұл жерде жауап бермеймін - оны мақаланың соңында табуға болады. Сонымен, мен басында айтқанымдай, Java тіліндегі және арасындағы негізгі айырмашылық мынада: сыныптың ағымдағы данасы көрсетеді, ал ата-аналық сыныптың ағымдағы данасы көрсетеді. Міне, айнымалы мәндерді пайдаланудың бір мысалы - сіз бірінің конструкторларын басқа біреуден шақыру мысалдарын көрген боларсыз, деп аталатын. конструкторларды тізбекте шақыру, бұл және кілт сөздерді пайдалану арқылы мүмкін болады . Класс ішінде оның аргументсіз конструкторын шақыру үшін пайдаланылады , ал ол дәлелсіз конструкторды шақыру үшін пайдаланылады немесе ол ата-аналық сыныптың әдепкі конструкторы деп те аталады. Айтпақшы, осылайша аргументсіз конструкторды ғана емес, оған сәйкес параметрлерді беру арқылы кез келген басқа конструкторды шақыруға болады. Жақында біз бұл пайдаланудың мысалын көреміз . Сондай-ақ Java -да олар класс данасы мен оның ата-анасының айнымалыларына қол жеткізу үшін пайдаланылады. Іс жүзінде оларға және префикстерінсіз қол жеткізуге болады , бірақ ағымдағы блокта мұндай айнымалылар басқа айнымалылармен қабаттаспаған жағдайда ғана, яғни. егер оның құрамында бірдей атаулары бар жергілікті айнымалылар болмаса, әйтпесе префикстері бар атауларды қолдануға тура келеді, бірақ бұл маңызды емес, өйткені бұл пішінде олар одан да оқылады. Бұл тәсілдің классикалық мысалы - оны айнымалы айнымалымен бірдей атаумен параметрді қабылдайтын конструктор ішінде пайдалану . Кейінірек мақалада біз және арасында тағы қандай айырмашылықтар бар екенін анықтаймыз және оларды қолданудың кейбір мысалдарын қарастырамыз. thissuperJava тіліндегі бұл және супер кілт сөздер арасындағы айырмашылық - 1thissuperthissuperthissuperthissuperthis()super()thissuperthissupersuperthisthissuperthis

Бұл және супер қалай ұқсас

thisжәне кілт сөздерінің арасындағы айырмашылықтарды қарастырмас бұрын super, олардың кейбір ұқсастықтарын қарастырайық:
  1. this, және екеуі де superстатикалық емес айнымалылар, сондықтан оларды статикалық контексте пайдалану мүмкін емес, яғни оларды негізгі әдісте пайдалану мүмкін емес. thisБұл «статикалық емес айнымалыға статикалық контекстен сілтеме жасау мүмкін емес» компиляция уақыты қатесіне әкеледі . Дәл солай болады, егер сіз негізгі әдісте кілт сөзді қолдансаңыз super.

  2. this, және екеуі де superконструкторлардың ішінде тізбектегі басқа конструкторларды шақыру үшін пайдаланылуы мүмкін, мысалы, 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();
    }

}
Нәтиже: А класының бір аргументті конструкторы В класының бір аргументті конструкторы В класының аргументі жоқ конструкторы
  1. Конструктор ішінде thisжәне superең басында барлық басқа өрнектердің үстінде болуы керек, әйтпесе компилятор қате туралы хабарды шығарады. Бұдан шығатыны, бір конструктор , this()және екеуін де қамтуы мүмкін емес super().

Супер мен бұл арасындағы айырмашылықтар

Енді біз кілт сөздерді қалай пайдалану керектігін білеміз superжәне thisолардың не үшін қажет екенін түсінеміз. Бірақ бұл кілт сөздерді пайдаланудың мен айтпаған тағы бір нұсқасы бар - Ішкі сыныптарда, олардың көмегімен сыртқы белгілер формасын пайдаланып сыртқы сыныпқа сілтеме жасау өте ыңғайлы. thisоның ағымдағы данасы және Сыртқы үшін. super- ата-анасы үшін. Outer сөзін сыртқы сынып атауымен ауыстыруды ұмытпаңыз. thisЕнді және кілт сөздердің арасындағы негізгі айырмашылықтарды қысқаша тізіп көрейікsuper
  1. айнымалы thisол қолданылатын сыныптың ағымдағы данасына сілтеме жасайды, ал ол superата-аналық сыныптың ағымдағы данасына сілтеме жасайды.

  2. Әрбір конструктор басқа конструкторларға нақты шақырулар болмаған жағдайда, super()өзінің ата-аналық сыныбының аргументі жоқ конструкторын жасырын түрде шақырады, бірақ сізде әрқашан кез келген басқа конструкторды this()немесе көмегімен анық шақыру мүмкіндігі бар super().
thisБұл кілт сөздер мен Java тіліндегі айырмашылықтар superжәне олардың бағдарламаларда қалай қолданылатыны туралы айтуға болатын нәрсе. Көріп отырғанымыздай, олардың негізгі мақсаты бір конструкторды екіншісінен шақыру және ағымдағы сыныпта және оның ата-аналық класында жарияланған айнымалы айнымалы мәндерге сілтеме жасау болып табылады. Бұл кәдімгі айнымалылар емес екенін ұмытпаңыз, ал қазір - бірінші абзацта сұраған сұрағыма жауап. Жоқ, айнымалыға thisжаңа мән тағайындау мүмкін емес, себебі ол түпкілікті деп жарияланған. Мұны IDE ішінде орындауға тырысуға болады - сіз "айнымалыға жаңа мән тағайындай алмайсыз this- ол түпкілікті деп жарияланған" компиляция қатесін аласыз. Түпнұсқа мақала осында .
Пікірлер
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION