Az interjúkérdések 90%-a
Itt található a 300 alapvető Java-interjúkérdés lista. Ha bármilyen alapvető Java-interjúkérdést tettek fel Önnek, kérjük, tegye fel a kérdések rovatba. Biztosítjuk, hogy itt megtalálja a 90%-ban gyakran ismételt interjúkérdéseket és válaszokat.
A Core Java interjú kérdéseire a válaszok rövidek és lényegre törőek. Az alapvető Java-interjúkérdések a Java-interjúkérdések alapjai, az OOP-interjúkérdések, a karakterlánckezelési interjúkérdések, a többszálú interjúkérdések, a gyűjteményinterjúkérdések, a JDBC-interjúkérdések stb. kategóriába sorolhatók.
1 2 3 4 5
Core Java: A Java interjúkérdések alapjai
1) Mi az a Java?
Jáva a magas szintű, objektum orientált , robusztus, biztonságos programozási nyelv, platformfüggetlen, nagy teljesítményű, többszálú és hordozható programozási nyelv. Ezt fejlesztette ki James Gosling 1991 júniusában. A platform néven is ismert, mivel saját JRE-t és API-t biztosít.
2) Mi a különbség a C++ és a Java között?
A különbségek között C++ és Java a következő táblázatban.
Összehasonlítási index | C++ | Jáva |
---|---|---|
Platformfüggetlen | A C++ platformfüggő. | A Java platformfüggetlen. |
Főleg arra használják | A C++-t főleg rendszerprogramozásra használják. | A Java-t elsősorban alkalmazásprogramozásra használják. Széles körben használják ablakos, webalapú, vállalati és mobil alkalmazásokban. |
Tervezési cél | A C++-t rendszerek és alkalmazások programozására tervezték. Ez egy kiterjesztése volt C programozási nyelv . | A Java-t a nyomtatórendszerek tolmácsaként tervezték és hozták létre, de később a hálózati számítástechnika támogatására is kiterjesztették. Úgy tervezték, hogy könnyen használható és szélesebb közönség számára elérhető legyen. |
Menj | A C++ támogatja a goto utasítást. | A Java nem támogatja a goto utasítást. |
Többszörös öröklés | A C++ támogatja a többszörös öröklődést. | A Java nem támogatja az osztályon keresztüli többszörös öröklődést. Úgy lehet elérni interfészek java-ban . |
Kezelő túlterhelése | C++ támogatja kezelő túlterhelése . | A Java nem támogatja az operátor túlterhelését. |
Mutatók | A C++ támogatja a mutatókat. Mutatóprogramot írhat C++ nyelven. | A Java belülről támogatja a mutatót. A mutatóprogramot azonban nem írhatja meg java-ban. Ez azt jelenti, hogy a Java korlátozott pointer-támogatással rendelkezik a Java-ban. |
Fordító és tolmács | A C++ csak fordítót használ. A C++ fordítása és futtatása a fordító segítségével történik, amely a forráskódot gépi kóddá alakítja, így a C++ platformfüggő. | A Java fordítót és tolmácsot egyaránt használ. A Java forráskód a fordításkor bájtkóddá alakul. Az értelmező ezt a bájtkódot végrehajtja futás közben, és kimenetet állít elő. A Java értelmezése ezért platformfüggetlen. |
Hívás érték szerint és hívás referenciával | A C++ támogatja az érték szerinti hívást és a referenciahívást is. | A Java csak az érték szerinti hívást támogatja. Java-ban nincs hivatkozási hívás. |
Struktúra és Unió | A C++ támogatja a struktúrákat és a szakszervezeteket. | A Java nem támogatja a struktúrákat és a szakszervezeteket. |
Szál támogatása | A C++ nem támogatja a szálakat. Harmadik féltől származó könyvtárakra támaszkodik a szálak támogatásához. | A Java beépített cérna támogatás. |
Dokumentációs megjegyzés | A C++ nem támogatja a dokumentációs megjegyzéseket. | A Java támogatja a dokumentációs megjegyzést (/** ... */) a java forráskód dokumentációjának létrehozásához. |
Virtuális kulcsszó | A C++ támogatja a virtuális kulcsszót, így eldönthetjük, hogy felülírunk-e egy függvényt vagy sem. | A Java-nak nincs virtuális kulcsszava. Alapértelmezés szerint felülírhatunk minden nem statikus metódust. Más szavakkal, a nem statikus módszerek alapértelmezés szerint virtuálisak. |
előjel nélküli jobb eltolás >>> | A C++ nem támogatja a >>> operátort. | A Java támogatja az előjel nélküli jobb eltolás >>> operátort, amely nullát tölt ki a negatív számok tetején. Pozitív számok esetén ugyanúgy működik, mint a >> operátor. |
Örökség fa | A C++ mindig új öröklési fát hoz létre. | A Java mindig egyetlen öröklési fát használ, mert minden osztály a java Object osztályának gyermeke. Az objektumosztály a gyöke a öröklés fa java-ban. |
Hardver | A C++ közelebb áll a hardverhez. | A Java nem annyira interaktív a hardverrel. |
Objektum orientált | A C++ egy objektumorientált nyelv. A C nyelvben azonban az egygyökér-hierarchia nem lehetséges. | A Java is egy objektum orientált nyelv. Azonban minden (az alapvető típusok kivételével) egy objektum a Java-ban. Ez egyetlen gyökérhierarchia, mivel minden a java.lang.Object-ből származik. |
3) Sorolja fel a Java programozási nyelv jellemzőit.
A Java programozási nyelvben a következő szolgáltatások találhatók.
4) Mit értesz Java virtuális gépen?
Java virtuális gép egy virtuális gép, amely lehetővé teszi a számítógép számára a Java program futtatását. A JVM futásidejű motorként működik, amely meghívja a Java kódban található fő metódust. A JVM az a specifikáció, amelyet implementálni kell a számítógépes rendszerben. A Java kódot a JVM egy bájtkódként fordítja le, amely gépfüggetlen és közel áll a natív kódhoz.
5) Mi a különbség a JDK, a JRE és a JVM között?
JVM
A JVM a Java Virtual Machine rövidítése; ez egy absztrakt gép, amely azt a futási környezetet biztosítja, amelyben a Java bájtkód végrehajtható. Ez egy specifikáció, amely meghatározza a Java Virtual Machine működését. A megvalósítást az Oracle és más cégek biztosították. Megvalósítása JRE néven ismert.
A JVM-ek számos hardver- és szoftverplatformhoz elérhetők (tehát a JVM platformfüggő). Ez egy futásidejű példány, amely a Java osztály futtatásakor jön létre. A JVM-nek három fogalma van: specifikáció, megvalósítás és példány.
JRE
A JRE a Java Runtime Environment rövidítése. Ez a JVM megvalósítása. A Java Runtime Environment olyan szoftvereszközök készlete, amelyeket Java alkalmazások fejlesztésére használnak. A futási környezet biztosítására szolgál. Ez a JVM megvalósítása. Fizikailag létezik. Egy sor könyvtárat és egyéb fájlokat tartalmaz, amelyeket a JVM futás közben használ.
JDK
A JDK a Java Development Kit rövidítése. Ez egy szoftverfejlesztő környezet, amelyet Java alkalmazások és kisalkalmazások fejlesztésére használnak. Fizikailag létezik. JRE + fejlesztőeszközöket tartalmaz. A JDK az Oracle Corporation által kiadott alábbi Java Platformok bármelyikének megvalósítása:
- Standard Edition Java platform
- Enterprise Edition Java platform
- Micro Edition Java platform
6) Hány típusú memóriaterületet foglal le a JVM?
Sok típus:
7) Mi az a JIT fordító?
Just-In-Time (JIT) fordító: A teljesítmény javítására szolgál. A JIT egyidejűleg fordítja le a bájtkód olyan részeit, amelyek hasonló funkcionalitásúak, és ezáltal csökkenti a fordításhoz szükséges időt. Itt a fordító kifejezés egy Java virtuális gép (JVM) utasításkészletéből egy adott CPU utasításkészletébe történő fordítóra utal.
8) Mi az a platform?
A platform az a hardver- vagy szoftverkörnyezet, amelyben egy szoftvert végrehajtanak. Kétféle platform létezik, szoftver alapú és hardver alapú. A Java szoftver alapú platformot biztosít.
9) Melyek a fő különbségek a Java platform és más platformok között?
A következő különbségek vannak a Java platform és más platformok között.
- A Java a szoftver alapú platform, míg más platformok lehetnek hardverplatformok vagy szoftveralapú platformok.
- A Java a többi hardverplatform tetején fut, míg más platformokon csak a hardverkomponensek lehetnek.
10) Mi adja a Java „egyszer írható és bárhol futtatható” jellegét?
A bájtkód. A Java fordító a Java programokat osztályfájllá (Byte Code) konvertálja, amely a forráskód és a gépi kód közötti köztes nyelv. Ez a bájtkód nem platformspecifikus, és bármely számítógépen végrehajtható.
11) Mi az osztálybetöltő?
A Classloader a JVM alrendszere, amely osztályfájlok betöltésére szolgál. Amikor futtatjuk a java programot, először az osztálybetöltő tölti be. A Java-ban három beépített osztálybetöltő található.
12) Az üres .java fájlnév érvényes forrásfájlnév?
Igen, a Java lehetővé teszi a java fájl mentését .Jáva csak le kell fordítanunk javac .java és elfut java osztálynév Vegyünk egy egyszerű példát:
//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
által állítsa össze javac .java
fuss el mellette java A
13) A delete, next, main, exit vagy null kulcsszó a Java-ban?
Nem.
14) Ha nem adok argumentumot a parancssorban, akkor a String tömbben tárolt érték milyen értéket ad át a main() metódusnak, üres vagy NULL?
Üres, de nem nulla.
15) Mi van, ha static public void-ot írok a public static void helyett?
A program megfelelően fordítódik és fut, mert a specifikációk sorrendje nem számít a Java-ban.
16) Mi a helyi változók alapértelmezett értéke?
A helyi változók nem inicializálódnak semmilyen alapértelmezett értékre, sem primitívekre, sem objektumhivatkozásokra.
17) Melyek a Java különböző hozzáférési specifikációi?
A Java-ban a hozzáférés-specifikátorok azok a kulcsszavak, amelyek a metódus, az osztály vagy a változó hozzáférési hatókörének meghatározására szolgálnak. A Java-ban négy hozzáférési specifikáció található az alábbiakban.
18) Mi a célja a statikus módszereknek és változóknak?
A statikusként meghatározott metódusok vagy változók az osztály összes objektuma között meg vannak osztva. A statikus az osztály és nem az objektum része. A statikus változók az osztályterületen vannak tárolva, és nem kell létrehoznunk az objektumot az ilyen változók eléréséhez. Ezért a static-ot abban az esetben használjuk, amikor olyan változókat vagy metódusokat kell definiálnunk, amelyek az osztály összes objektumánál közösek.
Például abban az osztályban, amely egy főiskola hallgatóinak összegyűjtését szimulálja, a főiskola neve az összes diák közös tulajdonsága. Ezért a főiskola neve így lesz meghatározva statikus .
19) Melyek a Java csomagok előnyei?
A csomagok Java-ban történő meghatározásának számos előnye van.
- A csomagok elkerülik a névütközést.
- A csomag könnyebb hozzáférést biztosít.
- Lehetnek rejtett osztályok is, amelyek kívülről nem láthatók, és a csomag használja.
- Könnyebb megtalálni a kapcsolódó osztályokat.
20) Mi a következő Java program kimenete?
class Test { public static void main (String args[]) { System.out.println(10 + 20 + 'Javatpoint'); System.out.println('Javatpoint' + 10 + 20); } }
A fenti kód kimenete lesz
30Javatpoint Javatpoint1020
Magyarázat
Az első esetben a 10-et és a 20-at számként kell kezelni, és hozzá kell adni 30-hoz. Most a 30-as összegüket karakterláncként kezeljük, és összefűzzük a karakterlánccal Javapont . Ezért a kimenet az lesz 30Javatpoint .
A második esetben a Javapont karakterlánc 10-el van összefűzve, így ez lesz a karakterlánc Javapont 10 amelyet ezután összefűzünk a 20-al, hogy legyen Javapoint1020 .
21) Mi a következő Java program kimenete?
class Test { public static void main (String args[]) { System.out.println(10 * 20 + 'Javatpoint'); System.out.println('Javatpoint' + 10 * 20); } }
A fenti kód kimenete lesz
200Javatpoint Javatpoint200
Magyarázat
Az első esetben először a 10 és 20 számokat szorozzák meg, majd a 200-as eredményt a rendszer karakterláncként kezeli, és összefűzi a karakterlánccal. Javapont a kimenet előállításához 200 Javapont .
A második esetben a 10 és 20 számokat először 200-ra szorozzuk meg, mivel a szorzás elsőbbsége nagyobb, mint az összeadás. A 200-as eredményt a rendszer karakterláncként kezeli, és összefűzi a karakterlánccal Javapont hogy a kimenetet mint Javapoint200 .
22) Mi a következő Java program kimenete?
class Test { public static void main (String args[]) { for(int i=0; 0; i++) { System.out.println('Hello Javatpoint'); } } }
A fenti kód a fordítási idő hibát adja, mivel a for ciklus logikai értéket igényel a második részben, mi pedig egész értéket adunk meg, azaz 0-t.
Core Java – OOP-koncepciók: Kezdeti OOP-interjúkérdések
Több mint 50 OOP (objektum-orientált programozás és rendszer) interjúkérdést kapunk. A jobb megértés érdekében azonban számos részbe sorolták őket, mint például a konstruktőri interjúkérdések, a statikus interjúkérdések, az öröklődési interjúkérdések, az absztrakciós interjúkérdések, a polimorfizmus-interjúkérdések stb.
23) Mi az objektum-orientált paradigma?
Ez egy programozási paradigma, amely olyan objektumokon alapul, amelyek adatai és metódusai abban az osztályban vannak definiálva, amelyhez tartozik. Az objektum-orientált paradigma célja a modularitás és az újrafelhasználhatóság előnyeinek beépítése. Az objektumok olyan osztályok példányai, amelyek kölcsönhatásba lépnek egymással az alkalmazások és programok tervezése során. Az objektum-orientált paradigmának a következő jellemzői vannak.
- A programtervezésben az alulról felfelé építkező megközelítést követi.
- Összpontosítson az adatokra az objektum adataival végzett műveletekkel
- Tartalmazza az olyan koncepciót, mint a beágyazás és az absztrakció, amely elrejti a bonyolultságot a felhasználó elől, és csak a funkcionalitást mutatja.
- Valós idejű megközelítést valósít meg, mint például az öröklődés, az absztrakció stb.
- Az objektum-orientált paradigma példái a C++, Simula, Smalltalk, Python, C# stb.
24) Mi az objektum?
Az objektum egy bizonyos állapotú és viselkedésű valós idejű entitás. A Java-ban az Object az osztály egy példánya, amelynek a példányváltozói az objektum állapota, a metódusok pedig az objektum viselkedése. Egy osztály objektuma a következővel hozható létre új kulcsszó.
25) Mi a különbség az objektum-orientált programozási nyelv és az objektum alapú programozási nyelv között?
A következő alapvető különbségek vannak az objektum-orientált nyelv és az objektum-alapú nyelv között.
- Az objektum-orientált nyelvek az OOP összes fogalmát követik, míg az objektumalapú nyelv nem követi az OOP összes fogalmát, például az öröklődést és a polimorfizmust.
- Az objektumorientált nyelvek nem rendelkeznek beépített objektumokkal, míg az objektumalapú nyelvek rendelkeznek beépített objektumokkal, például a JavaScript rendelkezik ablak objektumokkal.
- Az objektumorientált programozásra példa a Java, a C#, a Smalltalk stb., míg az objektumalapú nyelvekre a JavaScript, a VBScript stb.
26) Mi lesz egy példányváltozóként definiált objektumhivatkozás kezdeti értéke?
Java-ban minden objektumhivatkozás nullára van inicializálva.
Core Java – OOP-koncepciók: Konstruktorinterjúkérdések
27) Mi a konstruktor?
A konstruktor az objektum állapotának inicializálására használt metódus speciális típusaként határozható meg. Akkor hívódik meg, amikor az osztály példányosodik, és a memória le van foglalva az objektum számára. Minden alkalommal egy objektum jön létre a új kulcsszó, az osztály alapértelmezett konstruktora meghívásra kerül. A konstruktor nevének hasonlónak kell lennie az osztály nevéhez. A konstruktornak nem lehet kifejezett visszatérési típusa.
További részletek.28) Hányféle konstruktort használ a Java?
A konstruktorokban átadott paraméterek alapján kétféle konstruktor létezik a Java-ban.
29) Mi a célja az alapértelmezett konstruktornak?
Az alapértelmezett konstruktor célja az alapértelmezett érték hozzárendelése az objektumokhoz. A java fordító implicit módon létrehoz egy alapértelmezett konstruktort, ha nincs konstruktor az osztályban.
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(); } }Tesztelje most
Kimenet:
0 null 0 null
Magyarázat: A fenti osztályban nem hoz létre konstruktort, ezért a fordító egy alapértelmezett konstruktort biztosít. Itt 0 és null értékeket ad meg az alapértelmezett konstruktor.
További részletek.
30) A konstruktor visszaad valamilyen értéket?
Évek: igen, a konstruktor implicit módon visszaadja az osztály aktuális példányát (Nem használhat explicit visszatérési típust a konstruktorral). További részletek.
31) A konstruktor öröklődik?
Nem, a kivitelező nem öröklődik.
32) Véglegessé tud tenni egy konstruktőrt?
Nem, a kivitelező nem lehet végleges.
pd.merge
33) Túlterhelhetjük a konstruktorokat?
Igen, a konstruktorok túlterhelhetők a konstruktor által elfogadott argumentumok számának vagy a paraméterek adattípusának megváltoztatásával. Tekintsük a következő példát.
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); } }
A fenti programban A konstruktorteszt túlterhelt egy másik konstruktorral. A konstruktor első hívásánál az egy argumentummal rendelkező konstruktort hívják meg, és az i-t 10-es értékkel inicializálják. A konstruktor második hívásánál azonban a 2 argumentummal rendelkező konstruktor kerül meghívásra, és az i inicializálódik. 15 értékkel.
34) Mit ért másoláskonstruktor alatt Java nyelven?
A java-ban nincs másoláskonstruktor. Az értékeket azonban átmásolhatjuk egyik objektumról a másikra, mint a konstruktor másolása a C++-ban.
Sokféleképpen lehet átmásolni az egyik objektum értékeit a másikba a Java-ban. Ők:
- A kivitelező szerint
- Egy objektum értékeinek hozzárendelésével a másikhoz
- Az Object osztály clone() metódusával
Ebben a példában az egyik objektum értékeit átmásoljuk a másikba a java konstruktor segítségével.
//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(); } }Tesztelje most
Kimenet:
111 Karan 111 Karan
35) Mi a különbség a konstruktorok és a módszerek között?
Sok különbség van a konstruktorok és a módszerek között. Az alábbiakban közöljük őket.
Java konstruktor | Java módszer |
---|---|
A konstruktort egy objektum állapotának inicializálására használjuk. | Egy metódust használnak egy objektum viselkedésének feltárására. |
A konstruktornak nem lehet visszatérési típusa. | A metódusnak rendelkeznie kell visszatérési típussal. |
A konstruktort implicit módon hívják meg. | A módszert kifejezetten hívják. |
A Java fordító alapértelmezett konstruktort biztosít, ha nincs konstruktor az osztályban. | A módszert a fordító semmi esetre sem biztosítja. |
A konstruktor nevének meg kell egyeznie az osztály nevével. | A metódus neve megegyezhet az osztálynévvel, de lehet, hogy nem. |
36) Mi a következő Java program kimenete?
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); } }
A következő program kimenete:
a = 10 b = 15
Itt az a és b változók adattípusa, azaz a byte int-be kerül, és meghívásra kerül az első paraméterezett konstruktor a két egész paraméterrel.
37) Mi a következő Java program kimenete?
class Test { int i; } public class Main { public static void main (String args[]) { Test test = new Test(); System.out.println(test.i); } }
A program kimenete 0, mert az i változó belsőleg 0-ra van inicializálva. Mint tudjuk, hogy az alapértelmezett konstruktor implicit módon meghívásra kerül, ha nincs konstruktor az osztályban, az i változó 0-ra inicializálódik, mivel nincs konstruktor az osztályban.
38) Mi a következő Java program kimenete?
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); } }
Van egy fordítói hiba a programban, mert a fő metódusban van egy hívás az alapértelmezett konstruktorhoz, amely nincs jelen az osztályban. A Test osztályban azonban csak egy paraméterezett konstruktor található. Ezért a konstruktor implicit módon nem hív meg alapértelmezett konstruktort.
Core Java – OOP fogalmak: statikus kulcsszó Interjúkérdések
39) Mi a statikus változó?
A statikus változó az összes objektum közös tulajdonságára vonatkozik (amely nem egyedi minden objektumnál), például az alkalmazottak cégnevére, a hallgatók főiskolai neveire stb. A statikus változó csak egyszer kap memóriát az osztályterületen: az óra betöltési ideje. Statikus változó használatával a program memóriahatékonyabbá válik (memóriát takarít meg). A statikus változó inkább az osztályhoz tartozik, mint az objektumhoz.
//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(); } }Tesztelje most
Output:111 Karan ITS 222 Aryan ITS
További részletek.
40) Mi az a statikus módszer?
- A statikus metódus inkább az osztályhoz tartozik, mint az objektumhoz.
- A statikus metódusok meghívásához nincs szükség objektum létrehozására.
- A statikus metódusok hozzáférhetnek és megváltoztathatják a statikus változó értékét.
41) Mik azok a korlátozások, amelyek a Java statikus metódusaira vonatkoznak?
A statikus módszerekre két fő korlátozás vonatkozik.
- A statikus metódus nem használhat nem statikus adattagot, és nem hívhatja meg közvetlenül a nem statikus metódust.
- ez és a szuper nem használható statikus környezetben, mivel nem statikusak.
42) Miért statikus a fő módszer?
Mivel az objektum nem köteles meghívni a statikus metódust. Ha a main metódust nem statikussá tesszük, a JVM-nek először létre kell hoznia az objektumát, majd meghívnia kell a main() metódust, ami extra memóriafoglaláshoz vezet. További részletek.
43) Felülírhatjuk-e a statikus módszereket?
Nem, nem írhatjuk felül a statikus módszereket.
44) Mi az a statikus blokk?
A statikus blokk a statikus adattag inicializálására szolgál. A fő metódus előtt, az osztálybetöltéskor kerül végrehajtásra.
class A2{ static{System.out.println('static block is invoked');} public static void main(String args[]){ System.out.println('Hello main'); } }Tesztelje most
Output: static block is invoked Hello main
További részletek.
45) Futtathatunk-e programot main() metódus nélkül?
Válasz) Nem, a JDK 1.7 előtt lehetséges volt a statikus blokk használatával. A JDK 1.7 óta ez nem lehetséges. További részletek.
46) Mi van, ha a statikus módosítót eltávolítjuk a fő metódus aláírásából?
A program összeáll. Futás közben azonban „NoSuchMethodError” hibát ad.
47) Mi a különbség a statikus (osztály) metódus és a példánymetódus között?
statikus vagy osztálymódszer | példány módszer |
---|---|
1) A statikusnak deklarált metódust statikus módszernek nevezzük. | A nem statikusnak deklarált metódust példánymetódusnak nevezzük. |
2) Nem kell létrehoznunk az objektumokat a statikus metódusok meghívásához. | Az objektum a példánymetódusok meghívásához szükséges. |
3) A nem statikus (példány) tagok nem érhetők el közvetlenül statikus környezetben (statikus metódus, statikus blokk és statikus beágyazott osztály). | Statikus és nem statikus változók egyaránt elérhetők a példánymetódusokban. |
4) Például: public static int kocka(int n){ return n*n*n;} | Például: public void msg(){...}. |
48) Statikussá tehetjük a konstruktorokat?
Mint tudjuk, a statikus kontextus (metódus, blokk vagy változó) az osztályhoz tartozik, nem az objektumhoz. Mivel a konstruktorokat csak az objektum létrehozásakor hívják meg, nincs értelme statikussá tenni a konstruktorokat. Ha azonban megpróbálja ezt megtenni, a fordító megmutatja a fordítási hibát.
49) Statikussá tehetjük az absztrakt metódusokat Java-ban?
Java-ban, ha az absztrakt metódusokat statikussá tesszük, akkor az osztály részévé válik, és közvetlenül hívhatjuk, ami szükségtelen. Egy definiálatlan metódus hívása teljesen haszontalan, ezért nem megengedett.
50) Deklarálhatjuk-e a statikus változókat és metódusokat egy absztrakt osztályban?
Igen, absztrakt metódusban deklarálhatunk statikus változókat és metódusokat. Mivel tudjuk, hogy nem kötelező az objektumot a statikus kontextus elérésére állítani, ezért az absztrakt osztályon belül deklarált statikus kontextust az absztrakt osztály nevének használatával érhetjük el. Tekintsük a következő példát.
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); } }
Kimenet
hi !! I am good !! i = 102
Core Java – OOP-koncepciók: Öröklési interjúkérdések
51) Mi az ez kulcsszó a java-ban?
A ez A kulcsszó egy referenciaváltozó, amely az aktuális objektumra hivatkozik. Ezt a kulcsszót többféleképpen használják a Java nyelven. Használható az aktuális osztálytulajdonságokra, például példánymetódusokra, változókra, konstruktorokra stb. hivatkozni. Argumentumként is átadható a metódusokba vagy konstruktorokba. A metódusból az aktuális osztálypéldányként is visszaadható.
További részletek.
52) Mi a fő felhasználási módja ennek a kulcsszónak?
A következő felhasználási módok vannak ez kulcsszó.
53) Hozzárendelhetjük-e a hivatkozást? ez változó?
Nem, ez nem rendelhető hozzá semmilyen értékhez, mert mindig az aktuális osztályobjektumra mutat, és ez a végső hivatkozás a Java-ban. Ha azonban megpróbáljuk ezt megtenni, akkor megjelenik a fordítói hiba. Tekintsük a következő példát.
public class Test { public Test() { this = null; System.out.println('Test class constructor called'); } public static void main (String args[]) { Test t = new Test(); } }
Kimenet
Test.java:5: error: cannot assign a value to final variable this this = null; ^ 1 error
54) Tud ez kulcsszót használjuk a statikus tagok hivatkozására?
Igen, lehet használni ezt a kulcsszót statikus tagokra hivatkozni, mert ez csak egy referenciaváltozó, amely az aktuális osztályobjektumra hivatkozik. Azonban, mint tudjuk, szükségtelen a statikus változókhoz objektumon keresztül hozzáférni, ezért nem a legjobb gyakorlat ezzel statikus tagokra hivatkozni. Tekintsük a következő példát.
public class Test { static int i = 10; public Test () { System.out.println(this.i); } public static void main (String args[]) { Test t = new Test(); } }
Kimenet
10
55) Hogyan végezhető el a konstruktor láncolás ezzel a kulcsszóval?
A konstruktorok láncolása lehetővé teszi, hogy egy konstruktort hívjunk meg az osztály másik konstruktorából az aktuális osztályobjektumhoz képest. Ezzel a kulcsszóval konstruktorláncolást hajthatunk végre ugyanazon az osztályon belül. Tekintsük a következő példát, amely bemutatja, hogyan használhatjuk ezt a kulcsszót a konstruktorok láncolásához.
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); } }
Kimenet
ID: 105 Name:Vikas age:22 address: Delhi
56) Milyen előnyökkel jár, ha ezt a jelenlegi osztályobjektum helyett egy metódusba adjuk át?
Mint tudjuk, ez az aktuális osztály objektumra vonatkozik, ezért hasonlónak kell lennie az aktuális osztály objektumhoz. Két fő előnye lehet azonban annak, ha ezt egy metódusba adjuk át az aktuális osztályobjektum helyett.
- ez egy végső változó. Ezért ez nem rendelhető hozzá semmilyen új értékhez, míg az aktuális osztályobjektum esetleg nem végleges, és megváltoztatható.
- ez használható a szinkronizált blokkban.
57) Mi az öröklés?
Az öröklődés egy olyan mechanizmus, amellyel az egyik objektum elsajátítja egy másik osztályba tartozó objektum összes tulajdonságát és viselkedését. A kód újrafelhasználhatóságára és a módszer felülbírálására szolgál. A Java öröklésének alapja az, hogy új osztályokat hozhat létre, amelyek a meglévő osztályokra épülnek. Ha egy meglévő osztályból örököl, újra felhasználhatja a szülőosztály metódusait és mezőit. Ezenkívül új metódusokat és mezőket is hozzáadhat az aktuális osztályhoz. Az öröklődés az IS-A kapcsolatot jelenti, amely szülő-gyermek kapcsolatként is ismert.
A Java-ban ötféle öröklődés létezik.
- Egyszintű öröklődés
- Többszintű öröklődés
- Többszörös öröklés
- Hierarchikus öröklődés
- Hibrid öröklődés
A Java osztályon keresztüli többszörös öröklése nem támogatott.
További részletek.58) Miért használják az öröklődést a Java-ban?
Az alábbiakban bemutatott különféle előnyökkel jár az öröklődés Java-ban való használata.
- Az öröklődés biztosítja a kód újrafelhasználását. A származtatott osztálynak nem kell újradefiniálnia az alaposztály metódusát, hacsak nem kell biztosítania a metódus konkrét megvalósítását.
- A futásidejű polimorfizmus nem érhető el öröklődés nélkül.
- A valós idejű objektumokkal szimulálhatjuk az osztályok öröklődését, ami valósághűbbé teszi az OOP-okat.
- Az öröklődés biztosítja az adatok elrejtését. Az alaposztály elrejthet bizonyos adatokat a származtatott osztály elől, ha priváttá teszi azt.
- A módszer felülbírálása nem valósítható meg öröklődés nélkül. Metódus-felülbírálással megadhatjuk az alaposztály által tartalmazott alapmetódusok konkrét megvalósítását.
59) Melyik osztály az összes osztály szuperosztálya?
Az objektumosztály a Java összes többi osztályának szuperosztálya.
60) Miért nem támogatja a többszörös öröklődést a java?
A bonyolultság csökkentése és a nyelv egyszerűsítése érdekében a többszörös öröklődés nem támogatott a Java-ban. Tekintsünk egy forgatókönyvet, ahol A, B és C három osztály. A C osztály örökli az A és B osztályt. Ha az A és B osztálynak ugyanaz a metódusa, és a gyermek osztály objektumból hívja meg, akkor az A vagy B osztály metódusának hívása nem egyértelmű.
Mivel a fordítási hibák jobbak, mint a futásidejű hibák, a Java fordítási hibát jelenít meg, ha 2 osztályt örököl. Tehát akár ugyanaz a módszer, akár más, fordítási időhiba lép fel.
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? } }Tesztelje most
Compile Time Error
61) Mi az aggregáció?
Az aggregációt két osztály közötti kapcsolatként határozhatjuk meg, ahol az aggregált osztály hivatkozást tartalmaz a tulajdonában lévő osztályra. Az aggregációt legjobban úgy lehet leírni, mint a van egy kapcsolat. Például az Alkalmazott összesített osztály, amelynek különböző mezői vannak, például életkor, név és fizetés, a Cím osztály egy objektumát is tartalmazza, amely különböző mezőkkel rendelkezik, például 1. címsor, város, állam és PIN-kód. Más szóval azt mondhatjuk, hogy az Employee (osztály) objektumnak az Address osztálya van. Tekintsük a következő példát.
Cím.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; } }
Munkavállaló.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(); } }
Kimenet
111 varun gzb UP india 112 arun gno UP india
62) Mi az a kompozíció?
Egy osztály hivatkozásának egy másik osztályon belüli tárolását összetételnek nevezzük. Ha egy objektum tartalmazza a másik objektumot, és a benne lévő objektum nem létezhet konténerobjektum nélkül, akkor azt kompozíciónak nevezzük. Más szóval azt mondhatjuk, hogy a kompozíció az aggregáció azon sajátos esete, amely két objektum között erősebb kapcsolatot jelent. Példa: Egy osztály tanulókat tartalmaz. Egy diák nem létezhet osztály nélkül. Összetétel van az osztály és a tanulók között.
63) Mi a különbség az összesítés és az összetétel között?
Az aggregáció a gyenge kapcsolatot, míg az összetétel az erős kapcsolatot képviseli. Például a kerékpárnak van mutatója (összesítése), de a kerékpárnak van motorja (összetétele).
64) Miért nem támogatja a Java mutatókat?
A mutató egy változó, amely a memóriacímre hivatkozik. Javaban nem használják őket, mert nem biztonságosak (nem biztonságosak), és bonyolultak megérteni őket.
65) Mi a szuper a java-ban?
A szuper A kulcsszó a Java nyelvben egy referenciaváltozó, amelyet a közvetlen szülő osztály objektumra használnak. Amikor létrehozza az alosztály példányát, a szülőosztály egy példánya implicit módon jön létre, amelyre a szuperhivatkozási változó hivatkozik. A super()-t a fordító implicit módon meghívja az osztálykonstruktorban, ha nincs szuper vagy ez.
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(); } }Tesztelje most
Kimenet:
animal is created dog is createdTovábbi részletek.
66) Hogyan valósítható meg a konstruktor láncolás a szuper kulcsszó használatával?
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); } }
Kimenet
Name: Mukesh Salary: 90000.0 Age: 22 Address: Delhi
67) Melyek a szuper kulcsszó főbb felhasználási területei?
A szuper kulcsszó a következőképpen használható.
- A super használható a közvetlen szülő osztály példányváltozójára való hivatkozásra.
- super használható az azonnali szülő osztály metódusának meghívására.
- A super() használható az azonnali szülő osztály konstruktorának meghívására.
68) Mi a különbség ez és a szuper kulcsszó között?
A következő különbségek vannak ez és a szuper kulcsszó között.
- A szuper kulcsszó mindig a szülő osztály kontextusára mutat, míg ez a kulcsszó mindig az aktuális osztálykontextusra mutat.
- A szuper kulcsszó elsősorban az alap osztályváltozók inicializálására szolgál a származtatott osztálykonstruktoron belül, míg ez a kulcsszó elsősorban a helyi és a példányváltozók megkülönböztetésére szolgál, amikor az osztálykonstruktorban átadják.
- A super és ez legyen az első utasítás a konstruktoron belül, különben a fordító hibát fog kiütni.
69) Mi a következő Java program kimenete?
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(); } }
Kimenet
Person class constructor called Employee class constructor called
Magyarázat
A fordító implicit módon meghívja a super()-t, ha a származtatott osztálykonstruktor nem tartalmazza a super() vagy this()-t. Ezért ebben az esetben először a Személy osztály konstruktort, majd az Employee osztály konstruktort hívjuk meg.
70) Használható ez() és super() is egy konstruktorban?
Nem, mert ez() és super() kell az első utasítás az osztálykonstruktorban.
Példa:
public class Test{ Test() { super(); this(); System.out.println('Test class object is created'); } public static void main(String []args){ Test t = new Test(); } }
Kimenet:
Test.java:5: error: call to this must be first statement in constructor
71) Mi az objektum klónozás?
Az objektum klónozása egy objektum pontos másolatának létrehozására szolgál. Az Object osztály clone() metódusa egy objektum klónozására szolgál. A java.lang.Klónozható interfészt annak az osztálynak kell megvalósítania, amelynek objektumklónját szeretnénk létrehozni. Ha nem valósítjuk meg a klónozható felületet, a clone() metódus létrehozza a CloneNotSupportedException kivételt.
protected Object clone() throws CloneNotSupportedExceptionTovábbi részletek.
Core Java – OOP-koncepciók: Method Overloading Interjúkérdések
72) Mi az a módszer túlterhelés?
A metódusok túlterhelése a polimorfizmus technika, amely lehetővé teszi több, azonos nevű, de eltérő aláírású metódus létrehozását. A módszer túlterhelését kétféleképpen érhetjük el.
- Az argumentumok számának módosításával
- Az argumentumok adattípusának megváltoztatásával
A módszer túlterhelése növeli a program olvashatóságát. A módszer túlterhelése a program gyors kitalálása érdekében történik.
További részletek.73) Miért nem lehetséges a metódus túlterhelése a visszatérési típus megváltoztatásával java-ban?
Java-ban a metódusok túlterhelése nem lehetséges a program visszatérési típusának megváltoztatásával a félreérthetőség elkerülése érdekében.
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 }}Tesztelje most
Kimenet:
Compile Time Error: method add(int, int) is already defined in class AdderTovábbi részletek.
74) Túlterhelhetjük-e a metódusokat statikussá tételükkel?
Nem, nem tudjuk túlterhelni a metódusokat, ha csak a statikus kulcsszót alkalmazzuk rájuk (a paraméterek és típusok száma megegyezik). Tekintsük a következő példát.
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); } }
Kimenet
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) Túlterhelhetjük a main() metódust?
Igen, tetszőleges számú fő metódusunk lehet egy Java programban metódus túlterhelés használatával.
További részletek.76) Mi a módszer túlterhelés a típuspromócióval?
A típuspromóció alatt a módszer túlterhelése értendő, ez azt jelenti, hogy az egyik adattípus implicit módon egy másikra léptethető elő, ha nem található pontos egyezés.
Amint a fenti diagramon látható, a bájt előléptethető rövidre, intre, hosszúra, lebegőpontosra vagy kétszeresre. A rövid adattípus előléptethető int, long, float vagy double értékre. A char adattípus előléptethető int, long, float vagy double és így tovább. Tekintsük a következő példát.
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); } }Tesztelje most
Kimenet
40 60
77) Mi a következő Java program kimenete?
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 } }
Kimenet
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
Magyarázat
Két metódus van definiálva ugyanazzal a névvel, azaz összeggel. Az első módszer az egész és a hosszú típust fogadja el, míg a második módszer a long és az egész típust. Az átadott paraméterek a = 20, b = 20. Nem tudjuk megmondani, hogy melyik metódust hívjuk meg, mivel nincs egyértelmű különbségtétel az egész literál és a hosszú literál között. Ez a kétértelműség esete. Ezért a fordító hibát fog dobni.
Core Java – OOP-koncepciók: A módszer felülbírálása az interjúkérdésekre
78) Mi a módszer felülbírálása?
Ha egy alosztály egy olyan metódus konkrét megvalósítását biztosítja, amelyet a szülőosztálya már biztosított, akkor azt Method Overriding néven ismerjük. Futásidejű polimorfizmusra és az interfész módszerek megvalósítására használják.
A módszer felülbírálásának szabályai
- A metódusnak meg kell egyeznie a szülő osztály nevével.
- A metódusnak ugyanazzal az aláírással kell rendelkeznie, mint a szülő osztályban.
- Két osztály között IS-A kapcsolatnak kell lennie.
79) Felülírhatjuk a statikus módszert?
Nem, nem bírálhatod felül a statikus metódust, mert az osztály részét képezik, nem az objektumnak.
80) Miért nem írhatjuk felül a statikus módszert?
Ez azért van, mert a statikus metódus az osztály része, és osztályhoz van kötve, míg a példánymetódus az objektumhoz van kötve, és a static az osztályterületen kap memóriát, a példány pedig egy kupacban kap memóriát.
81) Felülírhatjuk a túlterhelt módszert?
Igen.
82) Különbség a túlterhelés és a felülbírálás módszere között.
Módszer Túlterhelés | Módszer felülbírálása |
---|---|
1) A módszer túlterhelése növeli a program olvashatóságát. | A metódus felülbírálása biztosítja a metódus speciális megvalósítását, amelyet a szuperosztálya már biztosít. |
2) Metódus túlterhelés lép fel az osztályon belül. | A módszer felülbírálása két olyan osztályban történik, amelyek között IS-A kapcsolat van. |
3) Ebben az esetben a paramétereknek eltérőnek kell lenniük. | Ebben az esetben a paramétereknek azonosaknak kell lenniük. |
83) Felülírhatjuk a privát módszereket?
Nem, nem írhatjuk felül a privát metódusokat, mert a privát metódusok hatóköre az osztályra korlátozódik, és nem érhetjük el őket az osztályon kívül.
84) Meg tudjuk-e változtatni a felülírt metódus hatókörét az alosztályban?
Igen, módosíthatjuk a felülírt metódus hatókörét az alosztályban. Azonban észre kell vennünk, hogy a módszer hozzáférhetőségét nem csökkenthetjük. A metódus hozzáférhetőségének megváltoztatásakor a következő pontra kell ügyelni.
- A privát módosítható védettre, nyilvánosra vagy alapértelmezettre.
- A védett módosítható nyilvánosra vagy alapértelmezettre.
- Az alapértelmezés nyilvánosra módosítható.
- A nyilvánosság mindig nyilvános marad.
85) Módosíthatjuk-e a szuperosztály metódus dobások záradékát, miközben felülírjuk az alosztályban?
Igen, módosíthatjuk a superclass metódus throws záradékát, miközben felülírjuk az alosztályban. Vannak azonban olyan szabályok, amelyeket be kell tartani, miközben felülírják a kivételkezelés esetén.
- Ha a szuperosztály metódus nem deklarál kivételt, az alosztály felülírt metódus nem tudja deklarálni az ellenőrzött kivételt, de deklarálhatja a nem ellenőrzött kivételt.
- Ha a szuperosztály metódus kivételt deklarál, az alosztály felülbírált metódus deklarálhatja ugyanazt, alosztály kivételt vagy kivételt, de nem deklarálhat szülő kivételt.
86) Mi a következő Java program kimenete?
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); } }
Kimenet
Base class method called with integer a = 10
Magyarázat
A(z) metódus túlterhelt a Base osztályban, míg a Derived osztályban a double type paraméterrel származtatják. A metódushívásban az egész szám kerül átadásra.
87) Lehetnek virtuális függvények a Java-ban?
Igen, a Java minden funkciója alapértelmezés szerint virtuális.
88) Mi az a kovariáns visszatérési típus?
Mostantól a java5 óta lehetőség van bármely metódus felülírására a visszatérési típus megváltoztatásával, ha az alosztály-felülbíráló metódus visszatérési típusa alosztálytípus. Kovariáns visszatérési típusnak nevezik. A kovariáns visszatérési típus megadja, hogy a visszatérési típus ugyanabban az irányban változhat, mint az alosztály.
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(); } }Tesztelje most
Output: welcome to covariant return typeTovábbi részletek.
89) Mi a következő Java program kimenete?
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(); } }
Kimenet
Derived method called ...
Magyarázat
A Base class metódusa, azaz a baseMethod() felül van írva a Derived osztályban. A Teszt osztályban a b referenciaváltozó (Bázis osztály típusú) a származtatott osztály példányára utal. Itt futásidejű polimorfizmus érhető el a Base és a Derived osztály között. Fordításkor a baseMethod metódus megléte ellenőrzött a Base osztályban, ha megvan, akkor a lefordított program ellenkező esetben a fordítói hiba jelenik meg. Ebben az esetben a baseMethod jelen van a Base osztályban; ezért sikeresen összeáll. Futás közben azonban ellenőrzi, hogy a BaseMethod-ot felülírta-e a Derived osztály, ha igen, akkor a Derived class metódust hívják, különben a Base class metódust hívják meg. Ebben az esetben a Derived osztály felülírja a baseMethod-ot; ezért a Derived class metódust nevezzük.
Core Java – OOP-koncepciók: utolsó kulcsszóinterjúkérdések
90) Mi a végső változó?
A Java-ban a végső változót arra használják, hogy korlátozzák a felhasználót a frissítésben. Ha inicializáljuk a végső változót, nem tudjuk megváltoztatni az értékét. Más szóval azt mondhatjuk, hogy a végső változót, ha egyszer hozzárendeltük egy értékhez, ezután már soha nem lehet megváltoztatni. A végső változó, amely nincs hozzárendelve semmilyen értékhez, csak az osztálykonstruktoron keresztül rendelhető hozzá.
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 classTesztelje most
Output:Compile Time ErrorTovábbi részletek.
91) Mi a végső módszer?
Ha bármelyik metódust végleges metódusra változtatjuk, azt nem tudjuk felülírni. További részletek.
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(); } }Tesztelje most
Output:Compile Time Error
92) Mi a végső osztály?
Ha bármely osztályt véglegessé teszünk, azt nem örökölhetjük egyik alosztályba sem.
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(); } }Tesztelje most
Output:Compile Time ErrorTovábbi részletek.
93) Mi a végső üres változó?
Egy végső változó, amely a deklaráció időpontjában nem inicializálódott, az utolsó üres változó néven ismert. Az utolsó üres változót nem tudjuk közvetlenül inicializálni. Ehelyett inicializálnunk kell az osztálykonstruktor használatával. Hasznos abban az esetben, ha a felhasználónak vannak olyan adatai, amelyeket mások nem módosíthatnak, például a PAN szám. Tekintsük a következő példát:
class Student{ int id; String name; final String PAN_CARD_NUMBER; ... }További részletek.
94) Inicializálhatjuk a végső üres változót?
Igen, ha nem statikus, akkor inicializálhatjuk a konstruktorban. Ha statikus üres végváltozó, akkor csak a statikus blokkban inicializálható. További részletek.
95) A fő módszert véglegesnek nyilváníthatja?
Igen, deklarálhatjuk a main metódust nyilvános static final void main(String[] args){}-ként.
96) Mi a következő Java program kimenete?
class Main { public static void main(String args[]){ final int i; i = 20; System.out.println(i); } }
Kimenet
20
Magyarázat
Mivel az i az üres végső változó. Csak egyszer inicializálható. 20-ra inicializáltuk. Ezért 20 kerül kinyomtatásra.
97) Mi a következő Java program kimenete?
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(); } }
Kimenet
Derived.java:11: error: getInfo() in Derived cannot override getInfo() in Base protected final void getInfo() ^ overridden method is final 1 error
Magyarázat
A getDetails() metódus végleges; ezért nem bírálható felül az alosztályban.
98) Véglegesnek nyilváníthatunk egy konstruktőrt?
A konstruktort soha nem lehet véglegesnek nyilvánítani, mert soha nem öröklődik. A konstruktorok nem hétköznapi módszerek; ezért nincs értelme véglegesnek nyilvánítani a konstruktorokat. Ha azonban megpróbálja ezt megtenni, a fordító hibát jelez.
99) Nyilatkozhatunk-e véglegesnek egy interfészt?
Nem, nem deklarálhatunk egy interfészt véglegesnek, mert az interfészt valamilyen osztálynak implementálnia kell ahhoz, hogy megadja a definícióját. Ezért nincs értelme véglegessé tenni egy felületet. Ha azonban megpróbálja ezt megtenni, a fordító hibát jelez.
100) Mi a különbség a végső módszer és az absztrakt módszer között?
A fő különbség a végső metódus és az absztrakt metódus között az, hogy az absztrakt metódus nem lehet végleges, mivel felül kell bírálnunk őket az alosztályban, hogy megadjuk a definícióját.