logo

300 alapvető Java interjúkérdés | 1. készlet

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.

    Egyszerű:A Java könnyen megtanulható. A Java szintaxisa C++ alapú, ami megkönnyíti a programírást benne.
    Objektum orientált:A Java az objektum-orientált paradigmát követi, amely lehetővé teszi számunkra, hogy kódunkat különböző típusú objektumok kombinációjaként tartsuk fenn, amely adatokat és viselkedést egyaránt magában foglal.
    Hordozható:A Java támogatja az egyszer olvasható-írás-bárhol megközelítést. A Java programot minden gépen le tudjuk futtatni. A Java program (.java) bájtkódra (.class) van konvertálva, amely minden gépen könnyen futtatható.
    Platformfüggetlen:A Java egy platformfüggetlen programozási nyelv. Ez különbözik a többi programozási nyelvtől, mint például a C és a C++, amelynek végrehajtásához platformra van szükség. A Java a saját platformjával érkezik, amelyen a kódja végrehajtódik. A Java nem függ a végrehajtandó operációs rendszertől.
    Biztonságos:A Java biztonságos, mert nem használ explicit mutatókat. A Java a ByteCode és a kivételkezelés koncepcióját is biztosítja, amely biztonságosabbá teszi.
    Erős:A Java erős programozási nyelv, mivel erős memóriakezelést használ. Az olyan koncepciók, mint az automatikus szemétgyűjtés, a kivételkezelés stb., robusztusabbá teszik.
    Semleges építészet:A Java építészeti szempontból semleges, mivel nem függ az architektúrától. C nyelven az adattípusok mérete a Java-ban nem létező architektúrától (32 bites vagy 64 bites) függően változhat.
    Értelmezve:A Java a Just-in-time (JIT) értelmezőt használja a fordítóval együtt a program végrehajtásához.
    Nagy teljesítményű:A Java gyorsabb, mint a többi hagyományos értelmezett programozási nyelv, mivel a Java bájtkód „közeli” a natív kódhoz. Még mindig egy kicsit lassabb, mint egy fordított nyelv (pl. C++).
    Többszálú:Több szál definiálásával tudunk olyan Java programokat írni, amelyek sok feladattal foglalkoznak egyszerre. A többszálú feldolgozás fő előnye, hogy nem foglal minden szál memóriát. Közös memóriaterületen osztozik. A szálak fontosak a multimédiás, webes alkalmazások stb.
    Megosztott:A Java terjesztett, mert lehetővé teszi a felhasználók számára, hogy elosztott alkalmazásokat hozzanak létre Java nyelven. Az RMI-t és az EJB-t elosztott alkalmazások létrehozására használják. A Java ezen funkciója lehetővé teszi számunkra, hogy az internet bármely gépéről meghívjuk a metódusokat a fájlokhoz.
    Dinamikus:A Java egy dinamikus nyelv. Támogatja az osztályok dinamikus betöltését. Ez azt jelenti, hogy az osztályokat igény szerint töltik be. Támogatja az anyanyelvi, azaz a C és a C++ funkciókat is.

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
További részletek.

6) Hány típusú memóriaterületet foglal le a JVM?

Sok típus:

    Osztály(módszer) Terület:Az osztályterület osztályonkénti struktúrákat tárol, például a futásidejű állandó készletet, a mezőt, a metódusadatokat és a metódusok kódját.Halom:Ez az a futásidejű adatterület, amelyben a memória le van foglalva az objektumokhozKazal:A Java Stack kereteket tárol. Helyi változókat és részeredményeket tartalmaz, és szerepet játszik a metódusok meghívásában és visszatérésében. Minden szálhoz tartozik egy privát JVM-verem, amely a szállal egy időben jön létre. Minden alkalommal új keret jön létre, amikor egy metódust meghívnak. Egy keret megsemmisül, amikor a metódushívása befejeződik.Programszámláló nyilvántartás:A PC (programszámláló) regiszter tartalmazza az éppen végrehajtott Java virtuális gép utasítás címét.Natív metódusverem:Tartalmazza az alkalmazásban használt összes natív módszert.
További részletek.

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ó.

    Bootstrap ClassLoader: Ez az első osztálybetöltő, amely az Extension classloader szuperosztálya. Feltölti a rt.jar fájl, amely tartalmazza a Java Standard Edition összes osztályfájlját, például java.lang csomagosztályokat, java.net csomagosztályokat, java.util csomagosztályokat, java.io csomagosztályokat, java.sql csomagosztályokat stb.Extension ClassLoader: Ez a Bootstrap gyermek osztálybetöltője és a System classloader szülő osztálybetöltője. Betölti a benne található jar fájlokat $JAVA_HOME/jre/lib/ext Könyvtár.Rendszer/alkalmazás osztálybetöltő: Ez az Extension classloader gyermekosztálybetöltője. Az osztályfájlokat az osztályútvonalról tölti be. Alapértelmezés szerint az osztályútvonal az aktuális könyvtárra van állítva. Az osztályútvonalat a '-cp' vagy '-classpath' kapcsolóval módosíthatja. Alkalmazás osztálybetöltőként is ismert.

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.

    NyilvánosA nyilvánosként definiált osztályok, metódusok vagy változók bármely osztályból vagy metódusból elérhetők.VédettA Protected elérhető ugyanannak a csomagnak az osztálya, vagy ennek az osztálynak az alosztálya, vagy ugyanazon az osztályon belül.AlapértelmezettAz alapértelmezett értékek csak a csomagon belül érhetők el. Alapértelmezés szerint az összes osztály, metódus és változó alapértelmezett hatókörű.MagánA privát osztály, metódusok vagy privátként meghatározott változók csak az osztályon belül érhetők el.

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.

    Alapértelmezett konstruktor:alapértelmezett konstruktor az, amely nem fogad el semmilyen értéket. Az alapértelmezett konstruktor főként a példányváltozó alapértelmezett értékekkel történő inicializálására szolgál. Használható objektumkészítés során hasznos feladatok elvégzésére is. Az alapértelmezett konstruktort a fordító implicit módon meghívja, ha az osztályban nincs megadva konstruktor.Paraméterezett konstruktor:A paraméterezett konstruktor az, amely képes inicializálni a példányváltozókat a megadott értékekkel. Más szóval azt mondhatjuk, hogy azokat a konstruktorokat, amelyek képesek elfogadni az argumentumokat, paraméterezett konstruktoroknak nevezzük.
Java konstruktorok

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.

Java 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 konstruktorJava 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.

Java konstruktorok vs Methods

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.
További részletek.

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ódszerpé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ó.

java ezt a kulcsszót
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ó.

    ezhasználható az aktuális osztálypéldányváltozóra való hivatkozásra.ezaz aktuális osztálymetódus meghívására használható (implicit módon)ez()használható az aktuális osztálykonstruktor meghívására.ezargumentumként adható át a metódushívásban.ezargumentumként adható át a konstruktorhívásban.ezhasználható az aktuális osztálypéldány visszaadására a metódusból.

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 created 
Tová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 CloneNotSupportedException 
Tová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 Adder 
Tová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.

Java Method Overloading Type Promotion

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.
További részletek.


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ésMó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 type 
Tová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á.

végső kulcsszó a java-ban
 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 class 
Tesztelje most
 Output:Compile Time Error 
Tová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 Error 
Tová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.