90% istota otázok na pohovore
Tu je zoznam 300 základných otázok na pohovor v jazyku Java. Ak vám bola položená nejaká základná otázka na pohovor v jazyku Java, zverejnite ju v sekcii s otázkami. Uisťujeme vás, že tu nájdete 90 % často kladených otázok a odpovedí na pohovor.
Odpovede na otázky týkajúce sa Core Java rozhovoru sú krátke a vecné. Základné otázky rozhovorov v jazyku Java sú kategorizované v otázkach Základy rozhovorov v jazyku Java, otázky týkajúce sa rozhovoru OOP, otázky týkajúce sa rozhovoru s reťazcom, otázky rozhovorov s viacerými vláknami, otázky týkajúce sa zberu pohovorov, otázky týkajúce sa rozhovoru JDBC atď.
1 2 3 4 5
Core Java: Základy Java Interview Otázky
1) Čo je Java?
Java je na vysokej úrovni, objektovo orientovaný , robustný, bezpečný programovací jazyk, platformovo nezávislý, vysoko výkonný, viacvláknový a prenosný programovací jazyk. Bol vyvinutý spoločnosťou James Gosling v júni 1991. Môže byť tiež známa ako platforma, pretože poskytuje svoje vlastné JRE a API.
2) Aké sú rozdiely medzi C++ a Java?
Rozdiely medzi C++ a Java sú uvedené v nasledujúcej tabuľke.
Porovnávací index | C++ | Java |
---|---|---|
Platformovo nezávislé | C++ je závislé od platformy. | Java je nezávislá na platforme. |
Používa sa hlavne na | C++ sa používa hlavne na programovanie systémov. | Java sa používa hlavne na programovanie aplikácií. Je široko používaný v okenných, webových, podnikových a mobilných aplikáciách. |
Cieľ dizajnu | C++ bol navrhnutý pre programovanie systémov a aplikácií. Išlo o rozšírenie C programovací jazyk . | Java bola navrhnutá a vytvorená ako interpret pre tlačové systémy, ale neskôr bola rozšírená ako podpora sieťových výpočtov. Bol navrhnutý s cieľom byť ľahko použiteľný a dostupný pre širšie publikum. |
Ísť do | C++ podporuje príkaz goto. | Java nepodporuje príkaz goto. |
Viacnásobné dedičstvo | C++ podporuje viacnásobnú dedičnosť. | Java nepodporuje viacnásobné dedenie prostredníctvom triedy. Dá sa to dosiahnuť tým rozhrania v jazyku Java . |
Preťaženie operátora | C++ podporuje preťaženie operátora . | Java nepodporuje preťaženie operátora. |
Ukazovatele | C++ podporuje ukazovatele . Ukazovateľový program môžete napísať v C++. | Java interne podporuje ukazovateľ. Ukazovací program však nemôžete napísať v jazyku Java. Znamená to, že java má obmedzenú podporu ukazovateľov v jazyku Java. |
Kompilátor a tlmočník | C++ používa iba kompilátor. C++ sa kompiluje a spúšťa pomocou kompilátora, ktorý prevádza zdrojový kód na strojový kód, takže C++ je závislý od platformy. | Java používa kompilátor aj tlmočník. Zdrojový kód Java sa v čase kompilácie skonvertuje na bajtový kód. Interpret vykoná tento bajtový kód za behu a vytvorí výstup. Java je interpretovaná preto, že je nezávislá na platforme. |
Call by Value a Call podľa referencie | C++ podporuje volanie podľa hodnoty aj volanie podľa odkazu. | Java podporuje len volanie podľa hodnoty. V jave nie je žiadne volanie odkazom. |
Štruktúra a únia | C++ podporuje štruktúry a zväzky. | Java nepodporuje štruktúry a odbory. |
Podpora vlákien | C++ nemá vstavanú podporu pre vlákna. Pri podpore vlákien sa spolieha na knižnice tretích strán. | Java má vstavaný niť podpora. |
Komentár k dokumentácii | C++ nepodporuje komentár k dokumentácii. | Java podporuje komentár k dokumentácii (/** ... */) na vytvorenie dokumentácie pre zdrojový kód Java. |
Virtuálne kľúčové slovo | C++ podporuje virtuálne kľúčové slovo, takže sa môžeme rozhodnúť, či funkciu prepíšeme alebo nie. | Java nemá žiadne virtuálne kľúčové slovo. Všetky nestatické metódy môžeme štandardne prepísať. Inými slovami, nestatické metódy sú štandardne virtuálne. |
posun vpravo bez znamienka >>> | C++ nepodporuje operátor >>>. | Java podporuje operátor posunu vpravo >>> bez znamienka, ktorý vyplní nulu hore pre záporné čísla. Pre kladné čísla to funguje rovnako ako operátor >>. |
Strom dedičstva | C++ vždy vytvorí nový strom dedičnosti. | Java vždy používa jeden strom dedičnosti, pretože všetky triedy sú potomkami triedy Object v jazyku Java. Trieda objektov je koreňom dedičstvo strom v jave. |
Hardvér | C++ je bližšie k hardvéru. | Java nie je taká interaktívna s hardvérom. |
Objektovo orientovaný | C++ je objektovo orientovaný jazyk. V jazyku C však nie je možná hierarchia jedného koreňového adresára. | Java je tiež objektovo orientovaný Jazyk. Všetko (okrem základných typov) je však v Jave objekt. Je to jediná koreňová hierarchia, pretože všetko je odvodené od java.lang.Object. |
3) Uveďte vlastnosti programovacieho jazyka Java.
Programovací jazyk Java obsahuje nasledujúce funkcie.
4) Čo rozumiete pod pojmom Java virtual machine?
Java Virtual Machine je virtuálny stroj, ktorý umožňuje počítaču spúšťať program Java. JVM funguje ako run-time engine, ktorý volá hlavnú metódu prítomnú v kóde Java. JVM je špecifikácia, ktorá musí byť implementovaná do počítačového systému. Java kód je kompilovaný JVM ako Bytecode, ktorý je nezávislý od stroja a je blízky natívnemu kódu.
5) Aký je rozdiel medzi JDK, JRE a JVM?
JVM
JVM je skratka pre Java Virtual Machine; je to abstraktný stroj, ktorý poskytuje runtime prostredie, v ktorom je možné spustiť bajtový kód Java. Je to špecifikácia, ktorá špecifikuje fungovanie Java Virtual Machine. Jeho implementáciu zabezpečila spoločnosť Oracle a ďalšie spoločnosti. Jeho implementácia je známa ako JRE.
JVM sú dostupné pre mnoho hardvérových a softvérových platforiem (takže JVM je závislé od platformy). Je to runtime inštancia, ktorá sa vytvorí, keď spustíme triedu Java. Existujú tri pojmy JVM: špecifikácia, implementácia a inštancia.
JRE
JRE je skratka pre Java Runtime Environment. Ide o implementáciu JVM. Java Runtime Environment je sada softvérových nástrojov, ktoré sa používajú na vývoj Java aplikácií. Používa sa na poskytovanie runtime prostredia. Ide o implementáciu JVM. Fyzicky existuje. Obsahuje sadu knižníc + ďalšie súbory, ktoré JVM používa za behu.
JDK
JDK je skratka pre Java Development Kit. Je to softvérové vývojové prostredie, ktoré sa používa na vývoj Java aplikácií a apletov. Fyzicky existuje. Obsahuje JRE + vývojové nástroje. JDK je implementácia ktorejkoľvek z nižšie uvedených platforiem Java vydaných spoločnosťou Oracle Corporation:
- Platforma Java Standard Edition
- Platforma Java Enterprise Edition
- Platforma Java Micro Edition
6) Koľko typov pamäťových oblastí prideľuje JVM?
Mnoho typov:
7) Čo je kompilátor JIT?
Kompilátor Just-In-Time (JIT): Používa sa na zlepšenie výkonu. JIT kompiluje časti bajtkódu, ktoré majú podobnú funkčnosť v rovnakom čase, a tým znižuje množstvo času potrebného na kompiláciu. Pojem kompilátor sa tu vzťahuje na prekladač z inštrukčnej sady virtuálneho stroja Java (JVM) do inštrukčnej sady konkrétneho CPU.
8) Čo je to platforma?
Platforma je hardvérové alebo softvérové prostredie, v ktorom sa softvér spúšťa. Existujú dva typy platforiem, softvérové a hardvérové. Java poskytuje softvérovú platformu.
9) Aké sú hlavné rozdiely medzi platformou Java a inými platformami?
Medzi platformou Java a inými platformami existujú nasledujúce rozdiely.
- Java je platforma založená na softvéri, zatiaľ čo iné platformy môžu byť hardvérové platformy alebo platformy založené na softvéri.
- Java sa spúšťa na vrchole iných hardvérových platforiem, zatiaľ čo iné platformy môžu mať iba hardvérové komponenty.
10) Čo dáva Jave jej povahu „napíš raz a spusti kdekoľvek“?
Bytový kód. Kompilátor Java konvertuje programy Java do súboru triedy (Byte Code), ktorý je prostredným jazykom medzi zdrojovým kódom a strojovým kódom. Tento bajtový kód nie je špecifický pre platformu a môže byť spustený na akomkoľvek počítači.
11) Čo je classloader?
Classloader je podsystém JVM, ktorý sa používa na načítanie súborov tried. Kedykoľvek spustíme java program, najprv ho načíta classloader. V Jave sú tri vstavané classloadery.
12) Je prázdny názov súboru .java platný názov zdrojového súboru?
Áno, Java umožňuje uložiť náš java súbor pomocou .java len ho musíme skompilovať javac .java a prebehnúť názov triedy java Uveďme si jednoduchý príklad:
//save by .java only class A{ public static void main(String args[]){ System.out.println('Hello java'); } } //compile by javac .java //run by java A
zostaviť to podľa javac .java
spustiť to java A
13) Je v jazyku Java kľúčové slovo delete, next, main, exit alebo null?
Nie
14) Ak na príkazovom riadku neuvediem žiadne argumenty, aká bude hodnota uložená v poli String odovzdaná do metódy main(), prázdna alebo NULL?
Je prázdna, ale nie nulová.
15) Čo ak napíšem static public void namiesto public static void?
Program sa skompiluje a beží správne, pretože na poradí špecifikátorov v Jave nezáleží.
16) Aká je predvolená hodnota lokálnych premenných?
Lokálne premenné nie sú inicializované na žiadnu predvolenú hodnotu, ani primitívy, ani odkazy na objekty.
17) Aké sú rôzne špecifikátory prístupu v jazyku Java?
V jazyku Java sú špecifikátory prístupu kľúčové slová, ktoré sa používajú na definovanie rozsahu prístupu metódy, triedy alebo premennej. V jazyku Java sú nižšie uvedené štyri špecifikátory prístupu.
18) Aký je účel statických metód a premenných?
Metódy alebo premenné definované ako statické sú zdieľané medzi všetkými objektmi triedy. Statika je súčasťou triedy a nie objektu. Statické premenné sú uložené v oblasti triedy a na prístup k takýmto premenným nemusíme vytvárať objekt. Preto sa statika používa v prípade, keď potrebujeme definovať premenné alebo metódy, ktoré sú spoločné pre všetky objekty triedy.
Napríklad v triede simulujúcej zhromaždenie študentov na vysokej škole je názov vysokej školy spoločným atribútom pre všetkých študentov. Preto bude názov vysokej školy definovaný ako statické .
19) Aké sú výhody balíkov v jazyku Java?
Definovanie balíkov v Jave má rôzne výhody.
- Balíčky sa vyhýbajú stretom mien.
- Balík poskytuje jednoduchšiu kontrolu prístupu.
- Môžeme mať aj skryté triedy, ktoré nie sú viditeľné vonku a používané balíkom.
- Je ľahšie nájsť súvisiace triedy.
20) Aký je výstup nasledujúceho programu Java?
class Test { public static void main (String args[]) { System.out.println(10 + 20 + 'Javatpoint'); System.out.println('Javatpoint' + 10 + 20); } }
Výstupom vyššie uvedeného kódu bude
30Javatpoint Javatpoint1020
Vysvetlenie
V prvom prípade sa 10 a 20 považujú za čísla a pripočítajú sa k 30. Teraz sa ich súčet 30 považuje za reťazec a spája sa s reťazcom Javatpoint . Preto bude výstup 30Javatpoint .
V druhom prípade je reťazec Javatpoint zreťazený s 10, aby bol reťazcom Javatpoint10 ktorý bude potom zreťazený s 20 byť Javatpoint1020 .
21) Aký je výstup nasledujúceho programu Java?
class Test { public static void main (String args[]) { System.out.println(10 * 20 + 'Javatpoint'); System.out.println('Javatpoint' + 10 * 20); } }
Výstupom vyššie uvedeného kódu bude
200Javatpoint Javatpoint200
Vysvetlenie
V prvom prípade sa najprv vynásobia čísla 10 a 20 a potom sa výsledok 200 považuje za reťazec a spojí sa s reťazcom. Javatpoint na výrobu výstupu 200Javatpoint .
V druhom prípade sa najprv vynásobia čísla 10 a 20 na 200, pretože priorita násobenia je vyššia ako sčítanie. Výsledok 200 bude považovaný za reťazec a zreťazený s reťazcom Javatpoint produkovať výstup ako Javatpoint200 .
22) Aký je výstup nasledujúceho programu Java?
class Test { public static void main (String args[]) { for(int i=0; 0; i++) { System.out.println('Hello Javatpoint'); } } }
Vyššie uvedený kód poskytne chybu pri kompilácii, pretože cyklus for vyžaduje boolovskú hodnotu v druhej časti a my poskytujeme celočíselnou hodnotu, t. j. 0.
Jadro Java - koncepty OOP: Úvodné otázky na rozhovor s OOP
Existuje viac ako 50 otázok na pohovor OOP (Object-Oriented Programming and System). Boli však rozdelené do mnohých sekcií, ako sú otázky na rozhovor s konštruktérom, otázky statického rozhovoru, otázky na rozhovor o dedičstve, otázka na rozhovor s abstrakciou, otázky na rozhovor s polymorfizmom atď.
23) Čo je objektovo orientovaná paradigma?
Ide o programovaciu paradigmu založenú na objektoch, ktoré majú údaje a metódy definované v triede, do ktorej patria. Objektovo orientovaná paradigma má za cieľ začleniť výhody modularity a opätovnej použiteľnosti. Objekty sú inštancie tried, ktoré sa navzájom ovplyvňujú pri navrhovaní aplikácií a programov. Objektovo orientovaná paradigma má nasledujúce vlastnosti.
- Pri navrhovaní programu sa riadi prístupom zdola nahor.
- Zamerajte sa na údaje pomocou metód na prácu s údajmi objektu
- Zahŕňa koncept ako zapuzdrenie a abstrakciu, ktorý pred používateľom skrýva zložitosť a zobrazuje iba funkčnosť.
- Implementuje prístup v reálnom čase, ako je dedičnosť, abstrakcia atď.
- Príkladmi objektovo orientovanej paradigmy sú C++, Simula, Smalltalk, Python, C# atď.
24) Čo je to predmet?
Objekt je entita v reálnom čase, ktorá má určitý stav a správanie. V jazyku Java je Object inštanciou triedy, ktorá má premenné inštancie ako stav objektu a metódy ako správanie objektu. Objekt triedy možno vytvoriť pomocou Nový kľúčové slovo.
25) Aký je rozdiel medzi objektovo orientovaným programovacím jazykom a objektovo orientovaným programovacím jazykom?
Medzi objektovo orientovaným jazykom a objektovo orientovaným jazykom existujú nasledujúce základné rozdiely.
- Objektovo orientované jazyky sa riadia všetkými konceptmi OOP, zatiaľ čo objektový jazyk sa neriadi všetkými konceptmi OOP, ako je dedičnosť a polymorfizmus.
- Objektovo orientované jazyky nemajú vstavané objekty, zatiaľ čo objektovo založené jazyky majú vstavané objekty, napríklad JavaScript má objekt okna.
- Príkladmi objektovo orientovaného programovania sú Java, C#, Smalltalk atď., zatiaľ čo príkladmi objektovo orientovaných jazykov sú JavaScript, VBScript atď.
26) Aká bude počiatočná hodnota odkazu na objekt, ktorý je definovaný ako premenná inštancie?
Všetky odkazy na objekty sú v jazyku Java inicializované na hodnotu null.
Core Java - OOPs Concepts: Constructor Interview Questions
27) Čo je to konštruktér?
Konštruktor môže byť definovaný ako špeciálny typ metódy, ktorá sa používa na inicializáciu stavu objektu. Vyvolá sa, keď sa vytvorí inštancia triedy a pamäť sa pridelí objektu. Zakaždým sa objekt vytvorí pomocou Nový kľúčové slovo, zavolá sa predvolený konštruktor triedy. Názov konštruktora musí byť podobný názvu triedy. Konštruktor nesmie mať explicitný návratový typ.
Viac informácií.28) Koľko typov konštruktorov sa používa v Jave?
Na základe parametrov odovzdaných v konštruktoroch existujú v Jave dva typy konštruktorov.
29) Aký je účel predvoleného konštruktora?
Účelom predvoleného konštruktora je priradiť predvolenú hodnotu objektom. Kompilátor java vytvorí predvolený konštruktor implicitne, ak v triede nie je žiadny konštruktor.
class Student3{ int id; String name; void display(){System.out.println(id+' '+name);} public static void main(String args[]){ Student3 s1=new Student3(); Student3 s2=new Student3(); s1.display(); s2.display(); } }Vyskúšajte to
Výkon:
0 null 0 null
Vysvetlenie: Vo vyššie uvedenej triede nevytvárate žiadny konštruktor, takže kompilátor vám poskytuje predvolený konštruktor. Tu sú v predvolenom konštruktore poskytnuté hodnoty 0 a null.
Viac informácií.
30) Vráti konštruktor nejakú hodnotu?
Roky: áno, Konštruktor implicitne vracia aktuálnu inštanciu triedy (s konštruktorom nemôžete použiť explicitný návratový typ). Viac informácií.
31) Je konštruktor zdedený?
Nie, konštruktor sa nededí.
32) Môžete urobiť konštruktér konečné?
Nie, konštruktor nemôže byť konečný.
ukazovateľ v c
33) Môžeme preťažiť konštruktory?
Áno, konštruktory môžu byť preťažené zmenou počtu argumentov akceptovaných konštruktorom alebo zmenou dátového typu parametrov. Zvážte nasledujúci príklad.
class Test { int i; public Test(int k) { i=k; } public Test(int k, int m) { System.out.println('Hi I am assigning the value max(k, m) to i'); if(k>m) { i=k; } else { i=m; } } } public class Main { public static void main (String args[]) { Test test1 = new Test(10); Test test2 = new Test(12, 15); System.out.println(test1.i); System.out.println(test2.i); } }
Vo vyššie uvedenom programe je Test konštruktora preťažený iným konštruktorom. V prvom volaní konštruktora sa zavolá konštruktor s jedným argumentom a i sa inicializuje s hodnotou 10. Pri druhom volaní konštruktora sa však zavolá konštruktor s 2 argumentmi a bude inicializované s hodnotou 15.
34) Čo rozumiete pod pojmom kopírovací konštruktor v jazyku Java?
V jave nie je žiadny kopírovací konštruktor. Môžeme však kopírovať hodnoty z jedného objektu do druhého ako kopírovací konštruktor v C++.
Existuje mnoho spôsobov, ako skopírovať hodnoty jedného objektu do druhého v jazyku Java. Oni sú:
- Podľa konštruktéra
- Priraďovaním hodnôt jedného objektu k druhému
- Metódou clone() triedy Object
V tomto príklade budeme kopírovať hodnoty jedného objektu do druhého pomocou java konštruktora.
//Java program to initialize the values from one object to another class Student6{ int id; String name; //constructor to initialize integer and string Student6(int i,String n){ id = i; name = n; } //constructor to initialize another object Student6(Student6 s){ id = s.id; name =s.name; } void display(){System.out.println(id+' '+name);} public static void main(String args[]){ Student6 s1 = new Student6(111,'Karan'); Student6 s2 = new Student6(s1); s1.display(); s2.display(); } }Vyskúšajte to
Výkon:
111 Karan 111 Karan
35) Aké sú rozdiely medzi konštruktérmi a metódami?
Medzi konštruktérmi a metódami je veľa rozdielov. Sú uvedené nižšie.
Java Constructor | Java metóda |
---|---|
Konštruktor sa používa na inicializáciu stavu objektu. | Metóda sa používa na odhalenie správania objektu. |
Konštruktor nesmie mať návratový typ. | Metóda musí mať návratový typ. |
Konštruktor je vyvolaný implicitne. | Metóda sa volá explicitne. |
Kompilátor Java poskytuje predvolený konštruktor, ak v triede nemáte žiadny konštruktor. | Metódu v žiadnom prípade neposkytuje kompilátor. |
Názov konštruktora musí byť rovnaký ako názov triedy. | Názov metódy môže alebo nemusí byť rovnaký ako názov triedy. |
36) Aký je výstup nasledujúceho programu Java?
public class Test { Test(int a, int b) { System.out.println('a = '+a+' b = '+b); } Test(int a, float b) { System.out.println('a = '+a+' b = '+b); } public static void main (String args[]) { byte a = 10; byte b = 15; Test test = new Test(a,b); } }
Výstupom nasledujúceho programu je:
a = 10 b = 15
Tu sa dátový typ premenných a a b, t.j. bajt, povýši na int a zavolá sa prvý parametrizovaný konštruktor s dvoma celočíselnými parametrami.
37) Aký je výstup nasledujúceho programu Java?
class Test { int i; } public class Main { public static void main (String args[]) { Test test = new Test(); System.out.println(test.i); } }
Výstup programu je 0, pretože premenná i je interne inicializovaná na 0. Keďže vieme, že predvolený konštruktor je vyvolaný implicitne, ak v triede nie je žiadny konštruktor, premenná i je inicializovaná na 0, pretože v triede nie je žiadny konštruktor.
38) Aký je výstup nasledujúceho programu Java?
class Test { int test_a, test_b; Test(int a, int b) { test_a = a; test_b = b; } public static void main (String args[]) { Test test = new Test(); System.out.println(test.test_a+' '+test.test_b); } }
Existuje a chyba kompilátora v programe, pretože v hlavnej metóde existuje volanie predvoleného konštruktora, ktorý sa v triede nenachádza. V triede Test je však len jeden parametrizovaný konštruktor. Preto konštruktor implicitne nevyvolá žiadny predvolený konštruktor.
Core Java - OOPs Concepts: statické kľúčové slovo Otázky na rozhovor
39) Čo je to statická premenná?
Statická premenná sa používa na odkazovanie na spoločnú vlastnosť všetkých objektov (ktorá nie je jedinečná pre každý objekt), napr. názov spoločnosti zamestnancov, meno študentov na vysokej škole atď. Statická premenná získa pamäť iba raz v oblasti triedy na adrese čas načítania triedy. Použitie statickej premennej zefektívňuje pamäť vášho programu (šetrí pamäť). Statická premenná patrí skôr do triedy ako do objektu.
//Program of static variable class Student8{ int rollno; String name; static String college ='ITS'; Student8(int r,String n){ rollno = r; name = n; } void display (){System.out.println(rollno+' '+name+' '+college);} public static void main(String args[]){ Student8 s1 = new Student8(111,'Karan'); Student8 s2 = new Student8(222,'Aryan'); s1.display(); s2.display(); } }Vyskúšajte to
Output:111 Karan ITS 222 Aryan ITS
Viac informácií.
40) Čo je to statická metóda?
- Statická metóda patrí skôr do triedy ako do objektu.
- Na volanie statických metód nie je potrebné vytvárať objekt.
- Statická metóda môže pristupovať a meniť hodnotu statickej premennej.
41) Aké sú obmedzenia, ktoré sa vzťahujú na statické metódy Java?
Na statické metódy sa vzťahujú dve hlavné obmedzenia.
- Statická metóda nemôže používať nestatický dátový člen alebo priamo volať nestatickú metódu.
- toto a super nemožno použiť v statickom kontexte, pretože sú nestatické.
42) Prečo je hlavná metóda statická?
Pretože objekt nie je povinný volať statickú metódu. Ak urobíme hlavnú metódu nestatickou, JVM bude musieť najprv vytvoriť svoj objekt a potom zavolať metódu main(), čo povedie k prideleniu extra pamäte. Viac informácií.
43) Môžeme prepísať statické metódy?
Nie, nemôžeme prepísať statické metódy.
44) Čo je to statický blok?
Statický blok sa používa na inicializáciu člena statických údajov. Vykonáva sa pred hlavnou metódou v čase načítania triedy.
class A2{ static{System.out.println('static block is invoked');} public static void main(String args[]){ System.out.println('Hello main'); } }Vyskúšajte to
Output: static block is invoked Hello main
Viac informácií.
45) Môžeme spustiť program bez metódy main()?
Odpoveď) Nie, pred JDK 1.7 to bolo možné pomocou statického bloku. Od JDK 1.7 to nie je možné. Viac informácií.
46) Čo ak sa z podpisu hlavnej metódy odstráni statický modifikátor?
Program sa skompiluje. Počas behu však vyhodí chybu „NoSuchMethodError“.
47) Aký je rozdiel medzi statickou (triednou) metódou a inštanciou?
statická alebo triedna metóda | inštancia metóda |
---|---|
1) Metóda, ktorá je deklarovaná ako statická, je známa ako statická metóda. | Metóda, ktorá nie je deklarovaná ako statická, je známa ako metóda inštancie. |
2) Na volanie statických metód nepotrebujeme vytvárať objekty. | Od objektu sa vyžaduje volanie metód inštancie. |
3) K nestatickým (inštanciám) členom nie je možné pristupovať priamo v statickom kontexte (statická metóda, statický blok a statická vnorená trieda). | V metódach inštancie je možné pristupovať k statickým aj nestatickým premenným. |
4) Napríklad: public static int cube (int n){ return n*n*n;} | Napríklad: public void msg(){...}. |
48) Môžeme urobiť konštruktérov statickými?
Ako vieme, statický kontext (metóda, blok alebo premenná) patrí do triedy, nie do objektu. Keďže konštruktory sa vyvolávajú iba pri vytvorení objektu, nemá zmysel robiť konštruktory statické. Ak sa však o to pokúsite, kompilátor zobrazí chybu kompilátora.
49) Môžeme urobiť abstraktné metódy statické v Jave?
Ak v Jave urobíme abstraktné metódy statické, stane sa súčasťou triedy a môžeme ju priamo nazvať, čo je zbytočné. Volanie nedefinovanej metódy je úplne zbytočné, preto nie je povolené.
50) Môžeme deklarovať statické premenné a metódy v abstraktnej triede?
Áno, statické premenné a metódy môžeme deklarovať v abstraktnej metóde. Keďže vieme, že nie je potrebné, aby objekt mal prístup k statickému kontextu, môžeme teda pristupovať k statickému kontextu deklarovanému v abstraktnej triede pomocou názvu abstraktnej triedy. Zvážte nasledujúci príklad.
abstract class Test { static int i = 102; static void TestMethod() { System.out.println('hi !! I am good !!'); } } public class TestClass extends Test { public static void main (String args[]) { Test.TestMethod(); System.out.println('i = '+Test.i); } }
Výkon
hi !! I am good !! i = 102
Jadro Java - koncepty OOPs: Otázky týkajúce sa pohovoru o dedičstve
51) Čo je toto kľúčové slovo v jave?
The toto kľúčové slovo je referenčná premenná, ktorá odkazuje na aktuálny objekt. V Jave existujú rôzne použitia tohto kľúčového slova. Môže sa použiť na odkazovanie na aktuálne vlastnosti triedy, ako sú metódy inštancie, premenná, konštruktory atď. Môže sa tiež odovzdať ako argument do metód alebo konštruktorov. Môže sa tiež vrátiť z metódy ako aktuálna inštancia triedy.
Viac informácií.
52) Aké sú hlavné použitia tohto kľúčového slova?
Existujú nasledujúce použitia toto kľúčové slovo.
53) Môžeme priradiť odkaz na toto variabilná?
Nie, toto nemožno priradiť k žiadnej hodnote, pretože vždy ukazuje na aktuálny objekt triedy a toto je konečná referencia v jazyku Java. Ak sa však o to pokúsime, zobrazí sa chyba kompilátora. Zvážte nasledujúci príklad.
public class Test { public Test() { this = null; System.out.println('Test class constructor called'); } public static void main (String args[]) { Test t = new Test(); } }
Výkon
Test.java:5: error: cannot assign a value to final variable this this = null; ^ 1 error
54) Can toto kľúčové slovo použiť na odkazovanie statických členov?
Áno, toto kľúčové slovo je možné použiť na odkazovanie na statické členy, pretože je to len referenčná premenná, ktorá odkazuje na aktuálny objekt triedy. Ako však vieme, nie je potrebné pristupovať k statickým premenným prostredníctvom objektov, preto nie je najlepším postupom používať to na odkazovanie na statické členy. Zvážte nasledujúci príklad.
public class Test { static int i = 10; public Test () { System.out.println(this.i); } public static void main (String args[]) { Test t = new Test(); } }
Výkon
10
55) Ako možno vykonať reťazenie konštruktorov pomocou tohto kľúčového slova?
Reťazenie konštruktorov nám umožňuje volať jeden konštruktor z iného konštruktora triedy vzhľadom na aktuálny objekt triedy. Toto kľúčové slovo môžeme použiť na vykonanie reťazenia konštruktora v rámci rovnakej triedy. Zvážte nasledujúci príklad, ktorý ilustruje, ako môžeme použiť toto kľúčové slovo na dosiahnutie reťazenia konštruktorov.
public class Employee { int id,age; String name, address; public Employee (int age) { this.age = age; } public Employee(int id, int age) { this(age); this.id = id; } public Employee(int id, int age, String name, String address) { this(id, age); this.name = name; this.address = address; } public static void main (String args[]) { Employee emp = new Employee(105, 22, 'Vikas', 'Delhi'); System.out.println('ID: '+emp.id+' Name:'+emp.name+' age:'+emp.age+' address: '+emp.address); } }
Výkon
ID: 105 Name:Vikas age:22 address: Delhi
56) Aké sú výhody odovzdania tohto do metódy namiesto samotného objektu aktuálnej triedy?
Ako vieme, toto sa vzťahuje na aktuálny objekt triedy, preto musí byť podobný objektu aktuálnej triedy. Prenesenie tohto do metódy namiesto aktuálneho objektu triedy však môže mať dve hlavné výhody.
- toto je posledná premenná. Preto to nemôže byť priradené žiadnej novej hodnote, zatiaľ čo aktuálny objekt triedy nemusí byť konečný a možno ho zmeniť.
- toto je možné použiť v synchronizovanom bloku.
57) Čo je dedičstvo?
Dedičnosť je mechanizmus, ktorým jeden objekt získava všetky vlastnosti a správanie iného objektu inej triedy. Používa sa na opätovné použitie kódu a prepísanie metódy. Myšlienka dedenia v Jave je, že môžete vytvárať nové triedy, ktoré sú postavené na existujúcich triedach. Keď dedíte z existujúcej triedy, môžete znova použiť metódy a polia nadradenej triedy. Okrem toho môžete do svojej aktuálnej triedy pridať aj nové metódy a polia. Dedičnosť predstavuje vzťah IS-A, ktorý je známy aj ako vzťah rodič-dieťa.
V Jave existuje päť typov dedičnosti.
- Jednoúrovňová dedičnosť
- Viacúrovňové dedičstvo
- Viacnásobné dedičstvo
- Hierarchické dedičstvo
- Hybridné dedičstvo
Viacnásobné dedenie nie je v jazyku Java podporované prostredníctvom triedy.
Viac informácií.58) Prečo sa v Jave používa dedičnosť?
Používanie dedičnosti v jazyku Java má rôzne výhody, ktoré sú uvedené nižšie.
- Dedičnosť poskytuje opätovnú použiteľnosť kódu. Odvodená trieda nemusí predefinovať metódu základnej triedy, pokiaľ nepotrebuje poskytnúť špecifickú implementáciu metódy.
- Runtime polymorfizmus nemožno dosiahnuť bez použitia dedičnosti.
- Môžeme simulovať dedenie tried pomocou objektov v reálnom čase, vďaka čomu sú OOP realistickejšie.
- Dedičnosť poskytuje skrytie údajov. Základná trieda môže skryť niektoré údaje z odvodenej triedy tak, že bude súkromná.
- Prepísanie metódy nie je možné dosiahnuť bez dedenia. Prepísaním metódy môžeme poskytnúť špecifickú implementáciu nejakej základnej metódy obsiahnutej v základnej triede.
59) Ktorá trieda je nadtriedou pre všetky triedy?
Trieda objektu je nadtriedou všetkých ostatných tried v Jave.
60) Prečo nie je v jave podporované viacnásobné dedičstvo?
Kvôli zníženiu zložitosti a zjednodušeniu jazyka nie je v jave podporované viacnásobné dedenie. Zvážte scenár, kde A, B a C sú tri triedy. Trieda C dedí triedy A a B. Ak triedy A a B majú rovnakú metódu a voláte ju z objektu triedy podriadenej triedy, volanie metódy triedy A alebo B bude nejednoznačné.
Keďže chyby v čase kompilácie sú lepšie ako chyby pri behu, Java vykreslí chybu v čase kompilácie, ak zdedíte 2 triedy. Či už teda máte rovnakú alebo inú metódu, dôjde k chybe v čase kompilácie.
class A{ void msg(){System.out.println('Hello');} } class B{ void msg(){System.out.println('Welcome');} } class C extends A,B{//suppose if it were Public Static void main(String args[]){ C obj=new C(); obj.msg();//Now which msg() method would be invoked? } }Vyskúšajte to
Compile Time Error
61) Čo je to agregácia?
Agregáciu možno definovať ako vzťah medzi dvoma triedami, kde agregovaná trieda obsahuje odkaz na triedu, ktorú vlastní. Agregácia je najlepšie opísaná ako a má vzťah. Napríklad súhrnná trieda Zamestnanec, ktorá má rôzne polia, ako je vek, meno a plat, obsahuje aj objekt triedy Adresa s rôznymi poľami, ako je 1. riadok adresy, Mesto, Štát a kód PIN. Inými slovami, môžeme povedať, že Zamestnanec (trieda) má objekt triedy Adresa. Zvážte nasledujúci príklad.
Adresa.java
public class Address { String city,state,country; public Address(String city, String state, String country) { this.city = city; this.state = state; this.country = country; } }
Zamestnanec.java
public class Emp { int id; String name; Address address; public Emp(int id, String name,Address address) { this.id = id; this.name = name; this.address=address; } void display(){ System.out.println(id+' '+name); System.out.println(address.city+' '+address.state+' '+address.country); } public static void main(String[] args) { Address address1=new Address('gzb','UP','india'); Address address2=new Address('gno','UP','india'); Emp e=new Emp(111,'varun',address1); Emp e2=new Emp(112,'arun',address2); e.display(); e2.display(); } }
Výkon
111 varun gzb UP india 112 arun gno UP india
62) Čo je zloženie?
Držanie odkazu na triedu v rámci inej triedy je známe ako kompozícia. Keď objekt obsahuje druhý objekt, ak obsiahnutý objekt nemôže existovať bez existencie kontajnerového objektu, potom sa to nazýva kompozícia. Inými slovami, môžeme povedať, že kompozícia je konkrétnym prípadom agregácie, ktorá predstavuje silnejší vzťah medzi dvoma objektmi. Príklad: Trieda obsahuje študentov. Študent nemôže existovať bez triedy. Medzi triedou a žiakmi existuje zloženie.
63) Aký je rozdiel medzi agregáciou a kompozíciou?
Agregácia predstavuje slabý vzťah, zatiaľ čo zloženie predstavuje silný vzťah. Napríklad bicykel má indikátor (agregácia), ale bicykel má motor (zloženie).
64) Prečo Java nepodporuje ukazovatele?
Ukazovateľ je premenná, ktorá odkazuje na adresu pamäte. V Jave sa nepoužívajú, pretože sú nebezpečné (nezabezpečené) a zložité na pochopenie.
65) Čo je super v jave?
The Super Kľúčové slovo v jazyku Java je referenčná premenná, ktorá sa používa na odkazovanie na objekt bezprostrednej nadradenej triedy. Kedykoľvek vytvoríte inštanciu podtriedy, implicitne sa vytvorí inštancia nadradenej triedy, na ktorú odkazuje superreferenčná premenná. Funkciu super() volá v konštruktore triedy implicitne kompilátor, ak neexistuje žiadne super alebo toto.
class Animal{ Animal(){System.out.println('animal is created');} } class Dog extends Animal{ Dog(){ System.out.println('dog is created'); } } class TestSuper4{ public static void main(String args[]){ Dog d=new Dog(); } }Vyskúšajte to
Výkon:
animal is created dog is createdViac informácií.
66) Ako možno vykonať reťazenie konštruktorov pomocou kľúčového slova super?
class Person { String name,address; int age; public Person(int age, String name, String address) { this.age = age; this.name = name; this.address = address; } } class Employee extends Person { float salary; public Employee(int age, String name, String address, float salary) { super(age,name,address); this.salary = salary; } } public class Test { public static void main (String args[]) { Employee e = new Employee(22, 'Mukesh', 'Delhi', 90000); System.out.println('Name: '+e.name+' Salary: '+e.salary+' Age: '+e.age+' Address: '+e.address); } }
Výkon
Name: Mukesh Salary: 90000.0 Age: 22 Address: Delhi
67) Aké sú hlavné použitia super kľúčového slova?
Existujú nasledujúce použitia super kľúčového slova.
- super možno použiť na odkazovanie na premennú inštancie bezprostrednej nadradenej triedy.
- super možno použiť na vyvolanie metódy bezprostrednej rodičovskej triedy.
- super() možno použiť na vyvolanie konštruktora bezprostrednej rodičovskej triedy.
68) Aké sú rozdiely medzi týmto a super kľúčovým slovom?
Medzi týmto a super kľúčovým slovom sú nasledujúce rozdiely.
- Kľúčové slovo super vždy ukazuje na kontext nadradenej triedy, zatiaľ čo toto kľúčové slovo vždy ukazuje na kontext aktuálnej triedy.
- Kľúčové slovo super sa primárne používa na inicializáciu premenných základnej triedy v rámci konštruktora odvodenej triedy, zatiaľ čo toto kľúčové slovo sa primárne používa na rozlíšenie medzi lokálnymi a inštanciami premenných pri odovzdaní v konštruktore triedy.
- Super a toto musí byť prvý príkaz v konštruktore, inak kompilátor vyvolá chybu.
69) Aký je výstup nasledujúceho programu Java?
class Person { public Person() { System.out.println('Person class constructor called'); } } public class Employee extends Person { public Employee() { System.out.println('Employee class constructor called'); } public static void main (String args[]) { Employee e = new Employee(); } }
Výkon
Person class constructor called Employee class constructor called
Vysvetlenie
Super() je implicitne vyvolané kompilátorom, ak žiadne super() alebo this() nie je explicitne zahrnuté v konštruktore odvodenej triedy. Preto sa v tomto prípade najprv zavolá konštruktor triedy Osoba a potom sa zavolá konštruktor triedy Zamestnanec.
70) Môžete použiť this() aj super() v konštruktore?
Nie, pretože this() a super() musia byť prvým príkazom v konštruktore triedy.
Príklad:
public class Test{ Test() { super(); this(); System.out.println('Test class object is created'); } public static void main(String []args){ Test t = new Test(); } }
Výkon:
Test.java:5: error: call to this must be first statement in constructor
71)Čo je klonovanie objektov?
Klonovanie objektu sa používa na vytvorenie presnej kópie objektu. Na klonovanie objektu sa používa metóda clone() triedy Object. The java.lang.Klonovateľné rozhranie musí byť implementované triedou, ktorej objektový klon chceme vytvoriť. Ak neimplementujeme rozhranie Cloneable, metóda clone() vygeneruje CloneNotSupportedException.
protected Object clone() throws CloneNotSupportedExceptionViac informácií.
Core Java - OOPs Concepts: Method Overloading Interview Questions
72) Čo je preťaženie metódy?
Preťažovanie metódami je technika polymorfizmu, ktorá nám umožňuje vytvárať viaceré metódy s rovnakým názvom, ale odlišným podpisom. Preťaženie metódy môžeme dosiahnuť dvoma spôsobmi.
- Zmenou počtu argumentov
- Zmenou dátového typu argumentov
Preťaženie metódy zvyšuje čitateľnosť programu. Preťaženie metódy sa vykonáva, aby sa program rýchlo zistil.
Viac informácií.73) Prečo nie je možné preťaženie metódy zmenou typu návratu v jave?
V Jave nie je možné preťaženie metódy zmenou návratového typu programu, aby sa predišlo nejednoznačnosti.
class Adder{ static int add(int a,int b){return a+b;} static double add(int a,int b){return a+b;} } class TestOverloading3{ public static void main(String[] args){ System.out.println(Adder.add(11,11));//ambiguity }}Vyskúšajte to
Výkon:
Compile Time Error: method add(int, int) is already defined in class AdderViac informácií.
74) Môžeme preťažiť metódy tým, že ich urobíme statickými?
Nie, nemôžeme preťažiť metódy tým, že na ne použijeme statické kľúčové slovo (počet parametrov a typov je rovnaký). Zvážte nasledujúci príklad.
public class Animal { void consume(int a) { System.out.println(a+' consumed!!'); } static void consume(int a) { System.out.println('consumed static '+a); } public static void main (String args[]) { Animal a = new Animal(); a.consume(10); Animal.consume(20); } }
Výkon
Animal.java:7: error: method consume(int) is already defined in class Animal static void consume(int a) ^ Animal.java:15: error: non-static method consume(int) cannot be referenced from a static context Animal.consume(20); ^ 2 errors
75) Môžeme preťažiť metódu main()?
Áno, pomocou preťaženia metód môžeme mať v programe Java ľubovoľný počet hlavných metód.
Viac informácií.76) Čo je preťaženie metódy propagáciou typu?
Pod pojmom propagácia typu je preťaženie metódy, čo znamená, že jeden typ údajov môže byť implicitne povýšený na iný, ak sa nenájde presná zhoda.
Ako je znázornené vo vyššie uvedenom diagrame, bajt môže byť povýšený na krátky, int, dlhý, pohyblivý alebo dvojitý. Krátky dátový typ môže byť povýšený na int, long, float alebo double. Dátový typ char môže byť povýšený na int, long, float alebo double a tak ďalej. Zvážte nasledujúci príklad.
class OverloadingCalculation1{ void sum(int a,long b){System.out.println(a+b);} void sum(int a,int b,int c){System.out.println(a+b+c);} public static void main(String args[]){ OverloadingCalculation1 obj=new OverloadingCalculation1(); obj.sum(20,20);//now second int literal will be promoted to long obj.sum(20,20,20); } }Vyskúšajte to
Výkon
40 60
77) Aký je výstup nasledujúceho programu Java?
class OverloadingCalculation3{ void sum(int a,long b){System.out.println('a method invoked');} void sum(long a,int b){System.out.println('b method invoked');} public static void main(String args[]){ OverloadingCalculation3 obj=new OverloadingCalculation3(); obj.sum(20,20);//now ambiguity } }
Výkon
OverloadingCalculation3.java:7: error: reference to sum is ambiguous obj.sum(20,20);//now ambiguity ^ both method sum(int,long) in OverloadingCalculation3 and method sum(long,int) in OverloadingCalculation3 match 1 error
Vysvetlenie
Existujú dve metódy definované s rovnakým názvom, t. j. súčet. Prvá metóda akceptuje celé číslo a typ long, zatiaľ čo druhá metóda akceptuje typ long a celé číslo. Odovzdaný parameter, ktorý je a = 20, b = 20. Nemôžeme povedať, ktorá metóda sa bude volať, pretože neexistuje jasné rozlíšenie medzi celočíselným literálom a dlhým literálom. Toto je prípad nejednoznačnosti. Preto kompilátor vyvolá chybu.
Core Java - OOPs Concepts: Method Overriding Questions
78) Čo je prepísanie metódy:
Ak podtrieda poskytuje špecifickú implementáciu metódy, ktorá je už poskytovaná jej nadradenou triedou, je známa ako prepísanie metódy. Používa sa na polymorfizmus za behu a na implementáciu metód rozhrania.
Pravidlá pre prepísanie metódy
- Metóda musí mať rovnaký názov ako v rodičovskej triede.
- Metóda musí mať rovnaký podpis ako v rodičovskej triede.
- Dve triedy musia mať medzi sebou vzťah IS-A.
79) Môžeme prepísať statickú metódu?
Nie, statickú metódu nemôžete prepísať, pretože sú súčasťou triedy, nie objektom.
80) Prečo nemôžeme prepísať statickú metódu?
Je to preto, že statická metóda je súčasťou triedy a je viazaná na triedu, zatiaľ čo metóda inštancie je viazaná na objekt a statická získava pamäť v oblasti triedy a inštancia získava pamäť na hromade.
81) Môžeme prepísať preťaženú metódu?
Áno.
82) Rozdiel medzi metódou Overloading a Overriding.
Preťaženie metódy | Prepísanie metódy |
---|---|
1) Preťaženie metódy zvyšuje čitateľnosť programu. | Prepísanie metódy poskytuje špecifickú implementáciu metódy, ktorú už poskytuje jej nadtrieda. |
2) V rámci triedy dochádza k preťaženiu metódy. | Prepísanie metódy sa vyskytuje v dvoch triedach, ktoré majú medzi sebou vzťah IS-A. |
3) V tomto prípade musia byť parametre odlišné. | V tomto prípade musia byť parametre rovnaké. |
83) Môžeme prepísať súkromné metódy?
Nie, nemôžeme prepísať súkromné metódy, pretože rozsah súkromných metód je obmedzený na triedu a nemôžeme k nim pristupovať mimo triedy.
84) Môžeme zmeniť rozsah prepísanej metódy v podtriede?
Áno, môžeme zmeniť rozsah prepísanej metódy v podtriede. Musíme si však uvedomiť, že nemôžeme znížiť dostupnosť metódy. Pri zmene prístupnosti metódy je potrebné dbať na nasledujúci bod.
- Súkromné je možné zmeniť na chránené, verejné alebo predvolené.
- Chránené je možné zmeniť na verejné alebo predvolené.
- Predvolené nastavenie je možné zmeniť na verejné.
- Verejnosť vždy zostane verejnou.
85) Môžeme upraviť klauzulu throws metódy nadtriedy a zároveň ju prepísať v podtriede?
Áno, môžeme upraviť klauzulu throws metódy nadtriedy a zároveň ju prepísať v podtriede. Existujú však niektoré pravidlá, ktoré je potrebné dodržiavať pri prepisovaní v prípade spracovania výnimiek.
- Ak metóda nadtriedy nedeklaruje výnimku, metóda prepísaná podtriedou nemôže deklarovať kontrolovanú výnimku, ale môže deklarovať nekontrolovanú výnimku.
- Ak metóda nadtriedy deklaruje výnimku, metóda prepísaná podtriedou môže deklarovať to isté, výnimku podtriedy alebo žiadnu výnimku, ale nemôže deklarovať nadradenú výnimku.
86) Aký je výstup nasledujúceho programu Java?
class Base { void method(int a) { System.out.println('Base class method called with integer a = '+a); } void method(double d) { System.out.println('Base class method called with double d ='+d); } } class Derived extends Base { @Override void method(double d) { System.out.println('Derived class method called with double d ='+d); } } public class Main { public static void main(String[] args) { new Derived().method(10); } }
Výkon
Base class method called with integer a = 10
Vysvetlenie
Method() je preťažená v triede Base, zatiaľ čo je odvodená v triede Derived s parametrom double. Pri volaní metódy sa odovzdáva celé číslo.
87) Môžete mať virtuálne funkcie v Jave?
Áno, všetky funkcie v Jave sú štandardne virtuálne.
88) Čo je typ kovariantného návratu?
Teraz, od java5, je možné prepísať akúkoľvek metódu zmenou návratového typu, ak návratový typ metódy prepisovania podtriedy je typ podtriedy. Je známy ako typ kovariantného návratu. Kovariantný návratový typ určuje, že návratový typ sa môže meniť v rovnakom smere ako podtrieda.
class A{ A get(){return this;} } class B1 extends A{ B1 get(){return this;} void message(){System.out.println('welcome to covariant return type');} public static void main(String args[]){ new B1().get().message(); } }Vyskúšajte to
Output: welcome to covariant return typeViac informácií.
89) Aký je výstup nasledujúceho programu Java?
class Base { public void baseMethod() { System.out.println('BaseMethod called ...'); } } class Derived extends Base { public void baseMethod() { System.out.println('Derived method called ...'); } } public class Test { public static void main (String args[]) { Base b = new Derived(); b.baseMethod(); } }
Výkon
Derived method called ...
Vysvetlenie
Metóda triedy Base, t.j. metóda baseMethod() je v odvodenej triede prepísaná. V triede Test odkazuje referenčná premenná b (typu Base class) na inštanciu triedy Derived. Tu sa dosiahne polymorfizmus Runtime medzi triedou Base a Derived. V čase kompilácie je skontrolovaná prítomnosť metódy baseMethod v triede Base. Ak je prítomná, program sa skompiloval, inak sa zobrazí chyba kompilátora. V tomto prípade je baseMethod prítomná v triede Base; preto je úspešne skompilovaný. Počas behu však skontroluje, či bola základná metóda prepísaná triedou Derived, ak áno, potom sa zavolá metóda triedy Derived, inak sa zavolá metóda triedy Base. V tomto prípade trieda Derived prepíše základnú metódu; preto sa volá metóda triedy Derived.
Core Java - OOPs Concepts: záverečné kľúčové slovo Otázky na rozhovor
90) Čo je konečná premenná?
V jazyku Java sa posledná premenná používa na obmedzenie aktualizácie používateľa. Ak inicializujeme konečnú premennú, nemôžeme zmeniť jej hodnotu. Inými slovami, môžeme povedať, že konečná premenná, ktorá je raz priradená k hodnote, sa už potom nemôže zmeniť. Konečná premenná, ktorá nie je priradená žiadnej hodnote, môže byť priradená iba prostredníctvom konštruktora triedy.
class Bike9{ final int speedlimit=90;//final variable void run(){ speedlimit=400; } public static void main(String args[]){ Bike9 obj=new Bike9(); obj.run(); } }//end of classVyskúšajte to
Output:Compile Time ErrorViac informácií.
91) Aká je konečná metóda?
Ak zmeníme akúkoľvek metódu na konečnú metódu, nemôžeme ju prepísať. Viac informácií.
class Bike{ final void run(){System.out.println('running');} } class Honda extends Bike{ void run(){System.out.println('running safely with 100kmph');} public static void main(String args[]){ Honda honda= new Honda(); honda.run(); } }Vyskúšajte to
Output:Compile Time Error
92) Aká je záverečná trieda?
Ak urobíme akúkoľvek triedu konečnou, nemôžeme ju zdediť do žiadnej z podtried.
final class Bike{} class Honda1 extends Bike{ void run(){System.out.println('running safely with 100kmph');} public static void main(String args[]){ Honda1 honda= new Honda1(); honda.run(); } }Vyskúšajte to
Output:Compile Time ErrorViac informácií.
93) Čo je konečná prázdna premenná?
Konečná premenná, ktorá nebola inicializovaná v čase deklarácie, je známa ako konečná prázdna premenná. Finálnu prázdnu premennú nemôžeme inicializovať priamo. Namiesto toho ho musíme inicializovať pomocou konštruktora triedy. Je to užitočné v prípade, keď má používateľ nejaké údaje, ktoré nesmú byť zmenené inými, napríklad číslo PAN. Zvážte nasledujúci príklad:
class Student{ int id; String name; final String PAN_CARD_NUMBER; ... }Viac informácií.
94) Môžeme inicializovať poslednú prázdnu premennú?
Áno, ak nie je statický, môžeme ho inicializovať v konštruktore. Ak je to statická prázdna konečná premenná, môže byť inicializovaná iba v statickom bloku. Viac informácií.
95) Môžete vyhlásiť hlavnú metódu za konečnú?
Áno, metódu main môžeme deklarovať ako verejnú statickú konečnú void main(String[] args){}.
96) Aký je výstup nasledujúceho programu Java?
class Main { public static void main(String args[]){ final int i; i = 20; System.out.println(i); } }
Výkon
20
Vysvetlenie
Pretože i je prázdna konečná premenná. Môže byť inicializovaný iba raz. Inicializovali sme ho na 20. Preto sa vytlačí 20.
97) Aký je výstup nasledujúceho programu Java?
class Base { protected final void getInfo() { System.out.println('method of Base class'); } } public class Derived extends Base { protected final void getInfo() { System.out.println('method of Derived class'); } public static void main(String[] args) { Base obj = new Base(); obj.getInfo(); } }
Výkon
Derived.java:11: error: getInfo() in Derived cannot override getInfo() in Base protected final void getInfo() ^ overridden method is final 1 error
Vysvetlenie
Metóda getDetails() je konečná; preto ho nemožno v podtriede prepísať.
98) Môžeme vyhlásiť konštruktor za konečný?
Konštruktor nemôže byť nikdy vyhlásený za konečný, pretože sa nikdy nededí. Konštruktory nie sú bežné metódy; preto nemá zmysel deklarovať konštruktory ako konečné. Ak sa však o to pokúsite, kompilátor vyvolá chybu.
99) Môžeme vyhlásiť rozhranie za konečné?
Nie, nemôžeme deklarovať rozhranie ako konečné, pretože rozhranie musí byť implementované nejakou triedou, aby poskytla svoju definíciu. Preto nemá zmysel robiť konečné rozhranie. Ak sa však o to pokúsite, kompilátor zobrazí chybu.
100) Aký je rozdiel medzi konečnou metódou a abstraktnou metódou?
Hlavný rozdiel medzi konečnou metódou a abstraktnou metódou je v tom, že abstraktná metóda nemôže byť konečná, pretože ich musíme prepísať v podtriede, aby sme dali jej definíciu.