90% varmuus haastattelukysymyksistä
Siellä on luettelo 300 Java-haastattelukysymyksestä. Jos sinulle on esitetty Java-haastattelun ydinkysymys, lähetä se kysy kysymys -osioon. Takaamme, että saat täältä 90 % haastattelun usein kysytyt kysymykset ja vastaukset.
Vastaukset Core Java -haastattelun kysymyksiin ovat lyhyitä ja ytimekkäitä. Java-haastattelun ydinkysymykset luokitellaan Java-haastattelukysymyksiin, OOPs-haastattelukysymyksiin, merkkijonokäsittelyn haastattelukysymyksiin, monisäikeisiin haastattelukysymyksiin, kokoelmahaastattelukysymyksiin, JDBC-haastattelukysymyksiin jne.
1 2 3 4 5
Core Java: Java-haastattelukysymysten perusteet
1) Mikä on Java?
Java on korkeatasoinen, oliosuuntautunut , vankka, turvallinen ohjelmointikieli, alustasta riippumaton, tehokas, monisäikeinen ja kannettava ohjelmointikieli. Sen on kehittänyt James Gosling kesäkuussa 1991. Sitä voidaan kutsua myös alustaksi, koska se tarjoaa oman JRE:n ja API:n.
2) Mitä eroa on C++:n ja Javan välillä?
Erot välillä C++ ja Java on annettu seuraavassa taulukossa.
Vertailuindeksi | C++ | Java |
---|---|---|
Alustasta riippumaton | C++ on alustariippuvainen. | Java on alustasta riippumaton. |
Käytetään pääasiassa | C++:aa käytetään pääasiassa järjestelmäohjelmointiin. | Javaa käytetään pääasiassa sovellusohjelmointiin. Sitä käytetään laajasti ikkuna-, verkko-, yritys- ja mobiilisovelluksissa. |
Suunnittelun tavoite | C++ on suunniteltu järjestelmien ja sovellusten ohjelmointiin. Se oli jatkoa C-ohjelmointikieli . | Java suunniteltiin ja luotiin tulkkina tulostusjärjestelmille, mutta laajennettiin myöhemmin tukiverkkolaskentaa. Se suunniteltiin siten, että se on helppokäyttöinen ja laajemman yleisön saatavilla. |
Mene | C++ tukee goto-lausetta. | Java ei tue goto-lausetta. |
Moniperintö | C++ tukee moniperintöä. | Java ei tue moninkertaista periytymistä luokan kautta. Se voidaan saavuttaa käyttämällä käyttöliittymät javassa . |
Kuljettajan ylikuormitus | C++ tukee operaattorin ylikuormitus . | Java ei tue operaattorin ylikuormitusta. |
Osoittimet | C++ tukee osoittimia. Voit kirjoittaa osoitinohjelman C++:lla. | Java tukee osoitinta sisäisesti. Osoitinohjelmaa ei kuitenkaan voi kirjoittaa javassa. Se tarkoittaa, että javalla on rajoitettu osoitintuki Javassa. |
Kääntäjä ja tulkki | C++ käyttää vain kääntäjää. C++ käännetään ja ajetaan kääntäjällä, joka muuntaa lähdekoodin konekoodiksi, joten C++ on alustariippuvainen. | Java käyttää sekä kääntäjää että tulkkia. Java-lähdekoodi muunnetaan tavukoodiksi käännösvaiheessa. Tulkki suorittaa tämän tavukoodin ajon aikana ja tuottaa tulosteen. Java tulkitaan siksi se on alustariippumaton. |
Soita arvon mukaan ja soita viitteellä | C++ tukee sekä kutsua arvolla että kutsua viittauksella. | Java tukee vain kutsua arvon mukaan. Javassa ei ole viittauskutsua. |
Rakenne ja unioni | C++ tukee rakenteita ja liittoja. | Java ei tue rakenteita ja liittoja. |
Säikeen tuki | C++:ssa ei ole sisäänrakennettua tukea säikeille. Se luottaa kolmannen osapuolen kirjastoihin säikeen tueksi. | Java on sisäänrakennettu lanka tuki. |
Dokumentaatiokommentti | C++ ei tue dokumentaatiokommentteja. | Java tukee dokumentaatiokommenttia (/** ... */) dokumentaation luomiseksi Java-lähdekoodille. |
Virtuaalinen avainsana | C++ tukee virtuaalista avainsanaa, jotta voimme päättää, ohitetaanko funktio vai ei. | Javalla ei ole virtuaalista avainsanaa. Voimme ohittaa kaikki ei-staattiset menetelmät oletuksena. Toisin sanoen ei-staattiset menetelmät ovat oletuksena virtuaalisia. |
allekirjoittamaton siirto oikealle >>> | C++ ei tue >>>-operaattoria. | Java tukee etumerkitöntä siirto oikealle >>> -operaattoria, joka täyttää nollan yläreunassa negatiivisille luvuille. Positiivisille luvuille se toimii samoin kuin >>-operaattori. |
Perintöpuu | C++ luo aina uuden perintöpuun. | Java käyttää aina yhtä perintöpuuta, koska kaikki luokat ovat javan Object-luokan lapsia. Objektiluokka on pää perinnön puu javassa. |
Laitteisto | C++ on lähempänä laitteistoa. | Java ei ole niin interaktiivinen laitteiston kanssa. |
Oliosuuntautunut | C++ on oliokieli. C-kielessä yhden juuren hierarkia ei kuitenkaan ole mahdollista. | Java on myös oliosuuntautunut Kieli. Kaikki (paitsi perustyypit) on kuitenkin Java-objekteja. Se on yksijuurihierarkia, koska kaikki johdetaan tiedostosta java.lang.Object. |
3) Listaa Java-ohjelmointikielen ominaisuudet.
Java-ohjelmointikielessä on seuraavat ominaisuudet.
4) Mitä ymmärrät Java-virtuaalikoneella?
Java-virtuaalikone on virtuaalikone, jonka avulla tietokone voi suorittaa Java-ohjelman. JVM toimii kuin ajonaikainen moottori, joka kutsuu Java-koodissa olevaa päämenetelmää. JVM on määritys, joka on otettava käyttöön tietokonejärjestelmässä. JVM on kääntänyt Java-koodin tavukoodiksi, joka on koneriippumaton ja lähellä alkuperäistä koodia.
5) Mitä eroa on JDK:n, JRE:n ja JVM:n välillä?
JVM
JVM on lyhenne sanoista Java Virtual Machine; se on abstrakti kone, joka tarjoaa ajonaikaisen ympäristön, jossa Java-tavukoodi voidaan suorittaa. Se on spesifikaatio, joka määrittelee Java-virtuaalikoneen toiminnan. Sen toteutuksen ovat toteuttaneet Oracle ja muut yritykset. Sen toteutus tunnetaan nimellä JRE.
JVM:itä on saatavana monille laitteisto- ja ohjelmistoalustoille (joten JVM on alustariippuvainen). Se on ajonaikainen ilmentymä, joka luodaan, kun suoritamme Java-luokan. JVM:llä on kolme käsitettä: määrittely, toteutus ja ilmentymä.
JRE
JRE tulee sanoista Java Runtime Environment. Se on JVM:n toteutus. Java Runtime Environment on joukko ohjelmistotyökaluja, joita käytetään Java-sovellusten kehittämiseen. Sitä käytetään ajonaikaisen ympäristön tarjoamiseen. Se on JVM:n toteutus. Se on fyysisesti olemassa. Se sisältää joukon kirjastoja + muita tiedostoja, joita JVM käyttää ajon aikana.
JDK
JDK on lyhenne sanoista Java Development Kit. Se on ohjelmistokehitysympäristö, jota käytetään Java-sovellusten ja -sovelmien kehittämiseen. Se on fyysisesti olemassa. Se sisältää JRE + -kehitystyökalut. JDK on minkä tahansa alla mainitun Oracle Corporationin julkaiseman Java-alustan toteutus:
- Standard Edition Java-alusta
- Enterprise Edition Java-alusta
- Micro Edition Java-alusta
6) Kuinka monta tyyppistä muistialuetta JVM varaa?
Useita tyyppejä:
7) Mikä on JIT-kääntäjä?
Just-In-Time (JIT) -kääntäjä: Sitä käytetään suorituskyvyn parantamiseen. JIT kääntää tavukoodin osia, joilla on samat toiminnot samanaikaisesti, ja vähentää siten kääntämiseen tarvittavaa aikaa. Tässä termi kääntäjä viittaa kääntäjään Java-virtuaalikoneen (JVM) käskyjoukosta tietyn CPU:n käskysarjaan.
8) Mikä on alusta?
Alusta on laitteisto- tai ohjelmistoympäristö, jossa ohjelmisto suoritetaan. On olemassa kahdenlaisia alustoja, ohjelmistopohjaisia ja laitteistopohjaisia. Java tarjoaa ohjelmistopohjaisen alustan.
9) Mitkä ovat tärkeimmät erot Java-alustan ja muiden alustojen välillä?
Java-alustan ja muiden alustojen välillä on seuraavat erot.
- Java on ohjelmistopohjainen alusta, kun taas muut alustat voivat olla laitteistoalustoja tai ohjelmistopohjaisia alustoja.
- Java suoritetaan muiden laitteistoalustojen päällä, kun taas muilla alustoilla voi olla vain laitteistokomponentteja.
10) Mikä antaa Javalle sen 'kirjoita kerran ja aja missä tahansa' -luonteen?
Tavukoodi. Java-kääntäjä muuntaa Java-ohjelmat luokkatiedostoksi (Byte Code), joka on lähdekoodin ja konekoodin välikieli. Tämä tavukoodi ei ole alustakohtainen, ja se voidaan suorittaa millä tahansa tietokoneella.
11) Mikä on classloader?
Classloader on JVM:n alijärjestelmä, jota käytetään luokkatiedostojen lataamiseen. Aina kun suoritamme Java-ohjelman, luokanlataaja lataa sen ensin. Javassa on kolme sisäänrakennettua luokanlataajaa.
12) Onko tyhjä .java-tiedoston nimi kelvollinen lähdetiedoston nimi?
Kyllä, Java sallii Java-tiedostomme tallentamisen .java vain, meidän on koottava se javac .java ja juosta ohi java-luokan nimi Otetaan yksinkertainen esimerkki:
//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
kokoa se javac .java
ajaa sen ohi java A
13) Onko javassa delete, next, main, exit vai null avainsana?
Ei.
14) Jos en anna argumentteja komentorivillä, mikä sitten String-taulukkoon tallennettu arvo siirtyy main()-metodiin, tyhjä vai NULL?
Se on tyhjä, mutta ei tyhjä.
15) Entä jos kirjoitan static public void -ilmoituksen julkisen staattisen tyhjyyden sijaan?
Ohjelma kääntää ja toimii oikein, koska määritteiden järjestyksellä ei ole merkitystä Javassa.
16) Mikä on paikallisten muuttujien oletusarvo?
Paikallisia muuttujia ei ole alustettu mihinkään oletusarvoon, ei primitiiveihin tai objektiviittauksiin.
17) Mitä eri käyttöoikeusmäärityksiä on Javassa?
Javassa käyttöoikeusmääritykset ovat avainsanoja, joita käytetään määrittämään menetelmän, luokan tai muuttujan käyttöoikeus. Javassa on neljä alla annettua pääsymääritystä.
18) Mikä on staattisten menetelmien ja muuttujien tarkoitus?
Staattisiksi määritellyt menetelmät tai muuttujat jaetaan kaikkien luokan objektien kesken. Staattisuus on osa luokkaa eikä objektia. Staattiset muuttujat tallennetaan luokka-alueelle, eikä meidän tarvitse luoda objektia päästäksemme tällaisiin muuttujiin. Siksi staattista käytetään siinä tapauksessa, että meidän on määriteltävä muuttujat tai menetelmät, jotka ovat yhteisiä luokan kaikille objekteille.
Esimerkiksi luokassa, joka simuloi korkeakoulun opiskelijoiden kokoelmaa, korkeakoulun nimi on yhteinen ominaisuus kaikille opiskelijoille. Siksi korkeakoulun nimi määritellään seuraavasti staattinen .
19) Mitkä ovat Java-pakettien edut?
Pakettien määrittämisessä Javassa on useita etuja.
- Paketit välttävät nimien ristiriitoja.
- Paketti tarjoaa helpon pääsynhallinnan.
- Meillä voi olla myös piilotetut luokat, jotka eivät näy ulkopuolelta ja joita paketti käyttää.
- Liittyvät luokat on helpompi paikantaa.
20) Mikä on seuraavan Java-ohjelman tulos?
class Test { public static void main (String args[]) { System.out.println(10 + 20 + 'Javatpoint'); System.out.println('Javatpoint' + 10 + 20); } }
Yllä olevan koodin tulos on
30Javatpoint Javatpoint1020
Selitys
Ensimmäisessä tapauksessa 10 ja 20 käsitellään numeroina ja lisätään 30:ksi. Nyt niiden summaa 30 käsitellään merkkijonona ja ketjutetaan merkkijonon kanssa Javapoint . Siksi tulos tulee olemaan 30 Javapoint .
Toisessa tapauksessa merkkijono Javatpoint ketjutetaan 10:een merkkijonoksi Javapoint 10 joka sitten ketjutetaan 20:een Javapoint 1020 .
21) Mikä on seuraavan Java-ohjelman tulos?
class Test { public static void main (String args[]) { System.out.println(10 * 20 + 'Javatpoint'); System.out.println('Javatpoint' + 10 * 20); } }
Yllä olevan koodin tulos on
200Javatpoint Javatpoint200
Selitys
Ensimmäisessä tapauksessa luvut 10 ja 20 kerrotaan ensin ja sitten tulosta 200 käsitellään merkkijonona ja ketjutetaan merkkijonon kanssa. Javapoint tuotoksen tuottamiseksi 200Javatpoint .
Toisessa tapauksessa luvut 10 ja 20 kerrotaan ensin 200:ksi, koska kertolasku on suurempi kuin yhteenlasku. Tulosta 200 käsitellään merkkijonona ja ketjutetaan merkkijonoon Javapoint tuottaa tuotoksen muodossa Javapoint 200 .
22) Mikä on seuraavan Java-ohjelman tulos?
class Test { public static void main (String args[]) { for(int i=0; 0; i++) { System.out.println('Hello Javatpoint'); } } }
Yllä oleva koodi antaa käännösaikavirheen, koska for-silmukka vaatii loogisen arvon toisessa osassa ja tarjoamme kokonaisluvun arvon, eli 0.
Core Java - OOPs-konseptit: Ensimmäiset OOP-haastattelukysymykset
Tarjolla on yli 50 OOP:n (Object-Oriented Programming and System) haastattelukysymystä. Ne on kuitenkin luokiteltu moniin osiin, kuten rakentajan haastattelukysymykset, staattiset haastattelukysymykset, periytymishaastattelukysymykset, abstraktiohaastattelukysymykset, polymorfismihaastattelukysymykset jne. ymmärtämisen helpottamiseksi.
23) Mikä on olio-paradigma?
Se on ohjelmointiparadigma, joka perustuu objekteihin, joiden tiedot ja menetelmät on määritelty luokassa, johon se kuuluu. Olio-paradigma pyrkii yhdistämään modulaarisuuden ja uudelleenkäytettävyyden edut. Objektit ovat luokkien esiintymiä, jotka ovat vuorovaikutuksessa toistensa kanssa sovellusten ja ohjelmien suunnittelussa. Olio-paradigmassa on seuraavat ominaisuudet.
- Noudattaa alhaalta ylös -lähestymistapaa ohjelman suunnittelussa.
- Keskity dataan menetelmillä, joilla voit käyttää kohteen tietoja
- Sisältää konseptin, kuten kapseloinnin ja abstraktion, joka piilottaa monimutkaisuudet käyttäjältä ja näyttää vain toiminnallisuuden.
- Toteuttaa reaaliaikaisen lähestymistavan, kuten perinnön, abstraktion jne.
- Esimerkkejä olio-paradigmasta ovat C++, Simula, Smalltalk, Python, C# jne.
24) Mikä on esine?
Objekti on reaaliaikainen kokonaisuus, jolla on jokin tila ja käyttäytyminen. Javassa Object on luokan ilmentymä, jonka ilmentymämuuttujat ovat kohteen tila ja menetelmät objektin käyttäytymisenä. Luokan objekti voidaan luoda käyttämällä Uusi avainsana.
25) Mitä eroa on olio-ohjelmointikielellä ja oliopohjaisella ohjelmointikielellä?
Oliopohjaisen kielen ja oliopohjaisen kielen välillä on seuraavat peruserot.
- Oliopohjaiset kielet noudattavat kaikkia OOP:iden käsitteitä, kun taas oliopohjainen kieli ei noudata kaikkia OOP:n käsitteitä, kuten periytymistä ja polymorfismia.
- Oliopohjaisissa kielissä ei ole sisäänrakennettuja objekteja, kun taas objektipohjaisissa kielissä on sisäänrakennettuja objekteja, esimerkiksi JavaScriptillä on ikkunaobjekti.
- Esimerkkejä olio-ohjelmoinnista ovat Java, C#, Smalltalk jne., kun taas esimerkkejä oliopohjaisista kielistä ovat JavaScript, VBScript jne.
26) Mikä on instanssimuuttujaksi määritellyn objektiviittauksen alkuarvo?
Kaikki objektiviittaukset alustetaan nollaksi Javassa.
Java-ydin – OOP-konseptit: rakentajien haastattelukysymykset
27) Mikä on rakentaja?
Konstruktori voidaan määritellä erityiseksi menetelmäksi, jota käytetään objektin tilan alustamiseen. Sitä kutsutaan, kun luokka instantoidaan ja objektille varataan muisti. Joka kerta objekti luodaan käyttämällä Uusi avainsana, luokan oletuskonstruktori kutsutaan. Rakentajan nimen tulee olla samanlainen kuin luokan nimi. Rakentajalla ei saa olla selkeää palautustyyppiä.
Lisätietoja.28) Kuinka monen tyyppisiä konstruktoreita Javassa käytetään?
Konstruktoreissa välitettyjen parametrien perusteella Javassa on kahdenlaisia konstruktoreita.
29) Mikä on oletuskonstruktorin tarkoitus?
Oletuskonstruktorin tarkoitus on määrittää oletusarvo objekteille. Java-kääntäjä luo oletuskonstruktorin implisiittisesti, jos luokassa ei ole rakentajaa.
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(); } }Testaa nyt
Lähtö:
0 null 0 null
Selitys: Yllä olevassa luokassa et luo rakentajaa, joten kääntäjä tarjoaa sinulle oletuskonstruktorin. Tässä oletuskonstruktori tarjoaa 0- ja nolla-arvot.
Lisätietoja.
30) Palauttaako konstruktori mitään arvoa?
Vuodet: kyllä, konstruktori palauttaa implisiittisesti luokan nykyisen ilmentymän (et voi käyttää eksplisiittistä palautustyyppiä rakentajan kanssa). Lisätietoja.
31) Onko konstruktori peritty?
Ei, rakentaja ei ole peritty.
32) Voitko tehdä rakentajan lopullisen?
Ei, rakentaja ei voi olla lopullinen.
he ovat laulajia
33) Voimmeko ylikuormittaa rakentajia?
Kyllä, konstruktoreita voidaan ylikuormittaa muuttamalla konstruktorin hyväksymien argumenttien määrää tai muuttamalla parametrien tietotyyppiä. Harkitse seuraavaa esimerkkiä.
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); } }
Yllä olevassa ohjelmassa Constructor Test on ylikuormitettu toisella konstruktorilla. Ensimmäisessä konstruktorin kutsussa kutsutaan rakentajaa, jolla on yksi argumentti, ja i alustetaan arvolla 10. Kuitenkin konstruktorin toisessa kutsussa kutsutaan konstruktoria, jolla on kaksi argumenttia, ja i alustetaan arvolla 15.
34) Mitä ymmärrät kopiokonstruktorilla Javassa?
Javassa ei ole kopiokonstruktoria. Voimme kuitenkin kopioida arvot objektista toiseen, kuten kopioida konstruktori C++:ssa.
On monia tapoja kopioida objektin arvot toiseen javassa. He ovat:
- Rakentajan toimesta
- Määrittämällä yhden objektin arvot toiselle
- Object-luokan clone()-metodilla
Tässä esimerkissä aiomme kopioida yhden objektin arvot toiseen käyttämällä Java-konstruktoria.
//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(); } }Testaa nyt
Lähtö:
111 Karan 111 Karan
35) Mitä eroja konstruktorien ja menetelmien välillä on?
Rakentajien ja menetelmien välillä on monia eroja. Ne on annettu alla.
Java-konstruktori | Java-menetelmä |
---|---|
Konstruktoria käytetään objektin tilan alustamiseen. | Menetelmää käytetään paljastamaan kohteen käyttäytyminen. |
Rakentajalla ei saa olla palautustyyppiä. | Metodilla on oltava palautustyyppi. |
Rakentajaa kutsutaan implisiittisesti. | Menetelmää kutsutaan eksplisiittisesti. |
Java-kääntäjä tarjoaa oletusmuodostajan, jos luokassa ei ole rakentajaa. | Kääntäjä ei missään tapauksessa tarjoa menetelmää. |
Rakentajan nimen on oltava sama kuin luokan nimen. | Metodin nimi voi olla sama kuin luokan nimi. |
36) Mikä on seuraavan Java-ohjelman tulos?
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); } }
Seuraavan ohjelman tulos on:
a = 10 b = 15
Tässä muuttujien a ja b tietotyyppi eli tavu ylennetään int:ksi ja kutsutaan ensimmäinen parametroitu konstruktori kahdella kokonaislukuparametrilla.
37) Mikä on seuraavan Java-ohjelman tulos?
class Test { int i; } public class Main { public static void main (String args[]) { Test test = new Test(); System.out.println(test.i); } }
Ohjelman tulos on 0, koska muuttuja i alustetaan sisäisesti arvoon 0. Kuten tiedämme, että oletuskonstruktori kutsutaan implisiittisesti, jos luokassa ei ole rakentajaa, muuttuja i alustetaan 0:ksi, koska luokassa ei ole konstruktoria.
38) Mikä on seuraavan Java-ohjelman tulos?
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); } }
Tuolla on kääntäjän virhe ohjelmassa, koska päämetodissa on kutsu oletuskonstruktorille, jota ei ole luokassa. Luokassa Test on kuitenkin vain yksi parametroitu konstruktori. Siksi rakentaja ei kutsu implisiittisesti mitään oletuskonstruktoria.
Java-ydin – OOP-käsitteet: staattiset avainsanahaastattelukysymykset
39) Mikä on staattinen muuttuja?
Staattisella muuttujalla viitataan kaikkien objektien yhteiseen omaisuuteen (joka ei ole yksilöllinen jokaiselle objektille), esim. työntekijöiden yrityksen nimi, opiskelijoiden korkeakoulunimi jne. Staattinen muuttuja saa muistin vain kerran luokka-alueella klo. luokan latausaika. Staattisen muuttujan käyttäminen tekee ohjelmastasi tehokkaamman muistin (se säästää muistia). Staattinen muuttuja kuuluu luokkaan eikä objektiin.
//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(); } }Testaa nyt
Output:111 Karan ITS 222 Aryan ITS
Lisätietoja.
40) Mikä on staattinen menetelmä?
- Staattinen menetelmä kuuluu luokkaan eikä objektiin.
- Ei ole tarvetta luoda objektia staattisten menetelmien kutsumiseksi.
- Staattisella menetelmällä voidaan käyttää ja muuttaa staattisen muuttujan arvoa.
41) Mitä rajoituksia sovelletaan Java-staattisiin menetelmiin?
Staattisiin menetelmiin sovelletaan kahta päärajoitusta.
- Staattinen menetelmä ei voi käyttää ei-staattista datajäsentä tai kutsua ei-staattista menetelmää suoraan.
- tätä ja superia ei voida käyttää staattisessa yhteydessä, koska ne ovat ei-staattisia.
42) Miksi päämenetelmä on staattinen?
Koska objektin ei tarvitse kutsua staattista menetelmää. Jos päämenetelmästä tehdään ei-staattinen, JVM:n on ensin luotava objektinsa ja sitten kutsuttava main()-metodia, mikä johtaa ylimääräiseen muistin varaamiseen. Lisätietoja.
43) Voimmeko ohittaa staattiset menetelmät?
Ei, emme voi ohittaa staattisia menetelmiä.
44) Mikä on staattinen lohko?
Staattista lohkoa käytetään staattisen datajäsenen alustamiseen. Se suoritetaan ennen päämenetelmää, luokan lataushetkellä.
class A2{ static{System.out.println('static block is invoked');} public static void main(String args[]){ System.out.println('Hello main'); } }Testaa nyt
Output: static block is invoked Hello main
Lisätietoja.
45) Voimmeko suorittaa ohjelman ilman main()-metodia?
Vastaus) Ei, se oli mahdollista ennen JDK 1.7:ää käyttämällä staattista lohkoa. JDK 1.7:n jälkeen se ei ole mahdollista. Lisätietoja.
46) Entä jos staattinen muuntaja poistetaan päämenetelmän allekirjoituksesta?
Ohjelma kootaan. Ajon aikana se kuitenkin antaa virheilmoituksen 'NoSuchMethodError'.
47) Mitä eroa on staattisen (luokka) menetelmän ja ilmentymämenetelmän välillä?
staattinen tai luokkamenetelmä | esimerkkimenetelmä |
---|---|
1) Staattiseksi julistettua menetelmää kutsutaan staattiseksi menetelmäksi. | Metodia, jota ei ole ilmoitettu staattiseksi, kutsutaan esiintymämenetelmäksi. |
2) Meidän ei tarvitse luoda objekteja kutsuaksemme staattisia menetelmiä. | Objektin on kutsuttava ilmentymämenetelmiä. |
3) Ei-staattisia (instanssi) jäseniä ei voida käyttää suoraan staattisessa kontekstissa (staattinen menetelmä, staattinen lohko ja staattinen sisäkkäinen luokka). | Staattisia ja ei-staattisia muuttujia voidaan käyttää sekä instanssimenetelmissä. |
4)Esimerkki: julkinen staattinen int kuutio(int n){ return n*n*n;} | Esimerkiksi: public void msg(){...}. |
48) Voimmeko rakentajat tehdä staattisiksi?
Kuten tiedämme, staattinen konteksti (metodi, lohko tai muuttuja) kuuluu luokkaan, ei objektiin. Koska konstruktoreita kutsutaan vain objektin luomisen yhteydessä, rakentajia ei ole järkevää tehdä staattisiksi. Jos kuitenkin yrität tehdä niin, kääntäjä näyttää kääntäjävirheen.
49) Voimmeko tehdä abstrakteista menetelmistä staattisia Javassa?
Javalla, jos teemme abstrakteista menetelmistä staattisia, siitä tulee osa luokkaa, ja voimme kutsua sitä suoraan, mikä on tarpeetonta. Määrittämättömän menetelmän kutsuminen on täysin hyödytöntä, joten se ei ole sallittua.
50) Voimmeko ilmoittaa staattiset muuttujat ja menetelmät abstraktissa luokassa?
Kyllä, voimme ilmoittaa staattiset muuttujat ja menetelmät abstraktilla menetelmällä. Koska tiedämme, että objektia ei vaadita pääsemään staattiseen kontekstiin, voimme siis päästä käsiksi abstraktin luokan sisällä ilmoitettuun staattiseen kontekstiin käyttämällä abstraktin luokan nimeä. Harkitse seuraavaa esimerkkiä.
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); } }
Lähtö
hi !! I am good !! i = 102
Core Java - OOPs-käsitteet: Periytyshaastattelukysymykset
51) Mikä on Tämä avainsana javassa?
The Tämä avainsana on viitemuuttuja, joka viittaa nykyiseen objektiin. Tälle avainsanalle on useita käyttötarkoituksia Javassa. Sitä voidaan käyttää viittaamaan nykyisten luokan ominaisuuksiin, kuten ilmentymämenetelmiin, muuttujaan, konstruktoreihin jne. Se voidaan myös välittää argumenttina menetelmiin tai konstruktoreihin. Se voidaan myös palauttaa menetelmästä nykyisenä luokan esiintymänä.
Lisätietoja.
52) Mitkä ovat tämän avainsanan tärkeimmät käyttötarkoitukset?
On olemassa seuraavat käyttötarkoitukset Tämä avainsana.
53) Voimmeko määrittää viitteen Tämä muuttuva?
Ei, tätä ei voi määrittää millekään arvolle, koska se osoittaa aina nykyiseen luokkaobjektiin ja tämä on viimeinen Java-viittaus. Jos yritämme kuitenkin tehdä niin, kääntäjävirhe näytetään. Harkitse seuraavaa esimerkkiä.
public class Test { public Test() { this = null; System.out.println('Test class constructor called'); } public static void main (String args[]) { Test t = new Test(); } }
Lähtö
Test.java:5: error: cannot assign a value to final variable this this = null; ^ 1 error
54) Voi Tämä käytetäänkö avainsanaa viittaamaan staattisiin jäseniin?
Kyllä, tällä avainsanalla voidaan viitata staattisiin jäseniin, koska tämä on vain viitemuuttuja, joka viittaa nykyiseen luokkaobjektiin. Kuten tiedämme, on kuitenkin tarpeetonta käyttää staattisia muuttujia objektien kautta, joten ei ole paras käytäntö käyttää tätä viittaamaan staattisiin jäseniin. Harkitse seuraavaa esimerkkiä.
public class Test { static int i = 10; public Test () { System.out.println(this.i); } public static void main (String args[]) { Test t = new Test(); } }
Lähtö
10
55) Kuinka rakentajien ketjuttaminen voidaan tehdä tällä avainsanalla?
Konstruktoriketjutuksen avulla voimme kutsua yhtä konstruktoria luokan toisesta rakentajasta suhteessa nykyiseen luokkaobjektiin. Voimme käyttää tätä avainsanaa rakentajien ketjutuksen suorittamiseen saman luokan sisällä. Harkitse seuraavaa esimerkkiä, joka havainnollistaa, kuinka voimme käyttää tätä avainsanaa rakentajien ketjutuksen saavuttamiseen.
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); } }
Lähtö
ID: 105 Name:Vikas age:22 address: Delhi
56) Mitä etuja on tämän siirtämisestä menetelmään nykyisen luokkaobjektin sijaan?
Kuten tiedämme, tämä viittaa nykyiseen luokkaobjektiin, joten sen on oltava samanlainen kuin nykyinen luokkaobjekti. Tämän siirtämisessä menetelmään nykyisen luokkaobjektin sijaan voi kuitenkin olla kaksi pääetua.
- tämä on viimeinen muuttuja. Siksi tätä ei voida määrittää millekään uudelle arvolle, kun taas nykyinen luokkaobjekti ei ehkä ole lopullinen ja sitä voidaan muuttaa.
- tätä voidaan käyttää synkronoidussa lohkossa.
57) Mikä on perintö?
Periytys on mekanismi, jolla yksi objekti hankkii kaikki toisen luokan toisen objektin ominaisuudet ja käyttäytymisen. Sitä käytetään koodin uudelleenkäytettävyyteen ja menetelmän ohittamiseen. Java-perinnön ideana on, että voit luoda uusia luokkia, jotka perustuvat olemassa oleviin luokkiin. Kun perit olemassa olevasta luokasta, voit käyttää uudelleen pääluokan menetelmiä ja kenttiä. Lisäksi voit lisätä uusia menetelmiä ja kenttiä myös nykyiseen luokkaasi. Perinnöllisyys edustaa IS-A-suhdetta, joka tunnetaan myös vanhemman ja lapsen välisenä suhteena.
Javassa on viisi perintötyyppiä.
- Yksitasoinen perintö
- Monitasoinen perintö
- Moniperintö
- Hierarkkinen perintö
- Hybridiperintö
Javassa ei tueta useaa periytymistä luokan kautta.
Lisätietoja.58) Miksi Javalla käytetään perintöä?
Perinnön käyttämisessä Javassa on useita etuja, jotka on esitetty alla.
- Periytys mahdollistaa koodin uudelleenkäytettävyyden. Johdetun luokan ei tarvitse määrittää uudelleen perusluokan menetelmää, ellei sen tarvitse tarjota menetelmän erityistä toteutusta.
- Ajonaikaista polymorfiaa ei voida saavuttaa ilman periytymistä.
- Voimme simuloida luokkien periytymistä reaaliaikaisilla objekteilla, mikä tekee OOP:ista realistisempia.
- Periytys tarjoaa tietojen piilottamisen. Perusluokka voi piilottaa joitain tietoja johdetulta luokasta tekemällä siitä yksityistä.
- Menetelmän ohittamista ei voida saavuttaa ilman periytymistä. Metodin ohituksella voimme antaa tietyn toteutuksen jollekin perusluokan sisältämälle perusmetodille.
59) Mikä luokka on kaikkien luokkien superluokka?
Objektiluokka on kaikkien muiden Java-luokkien yläluokka.
60) Miksi moniperintöä ei tueta javassa?
Monimutkaisuuden vähentämiseksi ja kielen yksinkertaistamiseksi moniperintöä ei tueta javassa. Tarkastellaan skenaariota, jossa A, B ja C ovat kolme luokkaa. C-luokka perii A- ja B-luokat. Jos A- ja B-luokilla on sama menetelmä ja kutsut sitä aliluokan objektista, on epäselvyyttä kutsua A- tai B-luokan metodia.
Koska käännösaikavirheet ovat parempia kuin ajonaikaiset virheet, Java tekee käännösaikavirheen, jos perit 2 luokkaa. Joten onko sinulla sama tai eri menetelmä, tulee käännösaikavirhe.
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? } }Testaa nyt
Compile Time Error
61) Mitä on yhdistäminen?
Aggregaatio voidaan määritellä kahden luokan väliseksi suhteeksi, jossa aggregaattiluokka sisältää viittauksen omistamaansa luokkaan. Aggregaatiota kuvataan parhaiten a has-a suhdetta. Esimerkiksi koontiluokka Työntekijä, jolla on useita kenttiä, kuten ikä, nimi ja palkka, sisältää myös Osoiteluokan objektin, jolla on useita kenttiä, kuten osoiterivi 1, kaupunki, osavaltio ja pin-koodi. Toisin sanoen voidaan sanoa, että työntekijällä (luokassa) on Osoiteluokan objekti. Harkitse seuraavaa esimerkkiä.
Osoite.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; } }
Työntekijä.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(); } }
Lähtö
111 varun gzb UP india 112 arun gno UP india
62) Mikä on koostumus?
Luokan viittauksen pitäminen jonkin muun luokan sisällä tunnetaan koostumuksella. Kun objekti sisältää toisen objektin, jos sisältynyt objekti ei voi olla olemassa ilman konttiobjektin olemassaoloa, sitä kutsutaan koostumukseksi. Toisin sanoen voidaan sanoa, että koostumus on aggregaation erityinen tapaus, joka edustaa vahvempaa suhdetta kahden objektin välillä. Esimerkki: Luokka sisältää opiskelijoita. Opiskelija ei voi olla olemassa ilman luokkaa. Luokan ja oppilaiden välillä on kokoonpano.
63) Mitä eroa on yhdistämisellä ja koostumuksella?
Aggregaatio edustaa heikkoa suhdetta, kun taas koostumus edustaa vahvaa suhdetta. Esimerkiksi pyörässä on ilmaisin (aggregaatio), mutta pyörässä on moottori (koostumus).
64) Miksi Java ei tue osoittimia?
Osoitin on muuttuja, joka viittaa muistiosoitteeseen. Niitä ei käytetä Javassa, koska ne ovat vaarallisia (suojaamattomia) ja monimutkaisia ymmärtää.
65) Mikä on super javassa?
The super Avainsana Javassa on viitemuuttuja, jota käytetään viittaamaan välittömään pääluokan objektiin. Aina kun luot aliluokan ilmentymän, emoluokan ilmentymä luodaan implisiittisesti, johon viitataan superviitemuuttujalla. Kääntäjä kutsuu super()-funktiota luokan konstruktorissa implisiittisesti, jos supera tai tätä ei ole.
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(); } }Testaa nyt
Lähtö:
animal is created dog is createdLisätietoja.
66) Kuinka rakentajien ketjuttaminen voidaan tehdä käyttämällä super-avainsanaa?
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); } }
Lähtö
Name: Mukesh Salary: 90000.0 Age: 22 Address: Delhi
67) Mitkä ovat super-avainsanan tärkeimmät käyttötarkoitukset?
Super-avainsanoilla on seuraavat käyttötavat.
- super voidaan viitata välittömään pääluokan ilmentymämuuttujaan.
- super voidaan käyttää välittömän yläluokan menetelmän käynnistämiseen.
- super()-funktiota voidaan käyttää välittömän yläluokan rakentajan kutsumiseen.
68) Mitä eroja tällä ja super-avainsanalla on?
Tämän ja super-avainsanan välillä on seuraavat erot.
- Super-avainsana viittaa aina pääluokan konteksteihin, kun taas tämä avainsana viittaa aina nykyiseen luokkakontekstiin.
- Super-avainsanaa käytetään ensisijaisesti perusluokkamuuttujien alustamiseen johdetun luokan rakentajan sisällä, kun taas tätä avainsanaa käytetään ensisijaisesti paikallisten ja ilmentymämuuttujien erottamiseen luokkakonstruktorissa.
- Super ja tämän täytyy olla ensimmäinen lause rakentajan sisällä, muuten kääntäjä antaa virheen.
69) Mikä on seuraavan Java-ohjelman tulos?
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(); } }
Lähtö
Person class constructor called Employee class constructor called
Selitys
Kääntäjä kutsuu implisiittisesti super()-funktiota, jos super()- tai this()-arvoa ei sisälly eksplisiittisesti johdettuun luokkakonstruktoriin. Siksi tässä tapauksessa kutsutaan ensin Henkilö-luokan konstruktori ja sitten kutsutaan Työntekijä-luokan konstruktori.
70) Voitko käyttää tätä() ja super() molempia konstruktorissa?
Ei, koska tämän() ja super() on oltava ensimmäinen lause luokkakonstruktorissa.
Esimerkki:
public class Test{ Test() { super(); this(); System.out.println('Test class object is created'); } public static void main(String []args){ Test t = new Test(); } }
Lähtö:
Test.java:5: error: call to this must be first statement in constructor
71) Mitä on objektikloonaus?
Objektin kloonausta käytetään kohteen tarkan kopion luomiseen. Object-luokan clone()-menetelmää käytetään objektin kloonaamiseen. The java.lang.Cloneable rajapinta tulee toteuttaa sen luokan toimesta, jonka objektikloonin haluamme luoda. Jos emme ota käyttöön kloonattavaa käyttöliittymää, clone()-menetelmä luo CloneNotSupportedExceptionin.
protected Object clone() throws CloneNotSupportedExceptionLisätietoja.
Core Java - OOPs Concepts: Menetelmän ylikuormitus haastattelukysymykset
72) Mitä menetelmän ylikuormitus on?
Menetelmän ylikuormitus on polymorfismitekniikka, jonka avulla voimme luoda useita menetelmiä samalla nimellä, mutta eri allekirjoituksella. Voimme saavuttaa menetelmän ylikuormituksen kahdella tavalla.
- Muuttamalla argumenttien määrää
- Muuttamalla argumenttien tietotyyppiä
Menetelmän ylikuormitus lisää ohjelman luettavuutta. Menetelmän ylikuormitus suoritetaan ohjelman nopean selvittämiseksi.
Lisätietoja.73) Miksi menetelmän ylikuormitus ei ole mahdollista muuttamalla palautustyyppiä Javassa?
Javassa menetelmän ylikuormitus ei ole mahdollista vaihtamalla ohjelman palautustyyppiä epäselvyyden välttämiseksi.
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 }}Testaa nyt
Lähtö:
Compile Time Error: method add(int, int) is already defined in class AdderLisätietoja.
74) Voimmeko ylikuormittaa menetelmiä tekemällä niistä staattisia?
Ei, emme voi ylikuormittaa menetelmiä käyttämällä niihin vain staattista avainsanaa (parametrien ja tyyppien määrä on sama). Harkitse seuraavaa esimerkkiä.
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); } }
Lähtö
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) Voimmeko ylikuormittaa main()-metodia?
Kyllä, meillä voi olla useita päämenetelmiä Java-ohjelmassa käyttämällä menetelmän ylikuormitusta.
Lisätietoja.76) Mitä on menetelmän ylikuormitus tyypin edistämisessä?
Tyypin edistämisellä tarkoitetaan menetelmän ylikuormitusta. Tarkoitamme, että yksi tietotyyppi voidaan ylentää toiseksi implisiittisesti, jos tarkkaa vastaavuutta ei löydy.
Kuten yllä olevassa kaaviossa näkyy, tavu voidaan ylentää lyhyeksi, int-, pitkäksi, kelluvaksi tai kaksinkertaiseksi. Lyhyt tietotyyppi voidaan yltää int-, long-, float- tai double-muotoon. Char-tietotyyppi voidaan yltää int-, long-, float- tai double-muotoon ja niin edelleen. Harkitse seuraavaa esimerkkiä.
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); } }Testaa nyt
Lähtö
40 60
77) Mikä on seuraavan Java-ohjelman tulos?
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 } }
Lähtö
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
Selitys
On olemassa kaksi menetelmää, jotka on määritelty samalla nimellä, eli summa. Ensimmäinen menetelmä hyväksyy kokonaisluvun ja pitkän tyypin, kun taas toinen menetelmä hyväksyy pitkän ja kokonaislukutyypin. Läpäisivät parametrit, jotka ovat a = 20, b = 20. Emme voi sanoa, mitä menetelmää kutsutaan, koska kokonaislukuliteraalin ja pitkän literaalin välillä ei ole mainittu selkeää eroa. Tässä on kyse epäselvyydestä. Siksi kääntäjä antaa virheen.
Core Java - OOPs-käsitteet: Menetelmän ohittaminen haastattelukysymykset
78) Mikä on menetelmän ohittaminen:
Jos alaluokka tarjoaa tietyn toteutuksen menetelmälle, jonka sen emoluokka tarjoaa jo, se tunnetaan nimellä Method Overriding. Sitä käytetään ajonaikaiseen polymorfismiin ja rajapintamenetelmien toteuttamiseen.
Menetelmän ohittamista koskevat säännöt
- Metodilla on oltava sama nimi kuin pääluokassa.
- Metodilla on oltava sama allekirjoitus kuin pääluokassa.
- Kahden luokan välillä on oltava IS-A-suhde.
79) Voimmeko ohittaa staattisen menetelmän?
Ei, et voi ohittaa staattista menetelmää, koska ne ovat osa luokkaa, eivät objekti.
80) Miksi emme voi ohittaa staattista menetelmää?
Tämä johtuu siitä, että staattinen menetelmä on osa luokkaa ja se on sidottu luokkaan, kun taas ilmentymämenetelmä on sidottu objektiin, ja staattinen saa muistia luokka-alueelta ja ilmentymä saa muistin kasaan.
81) Voimmeko ohittaa ylikuormitetun menetelmän?
Joo.
82) Ero menetelmän Overloading ja Overriding välillä.
Menetelmän ylikuormitus | Menetelmän ohittaminen |
---|---|
1) Menetelmän ylikuormitus lisää ohjelman luettavuutta. | Metodin ohitus tarjoaa menetelmän erityisen toteutuksen, jonka sen superluokka jo tarjoaa. |
2) Luokassa esiintyy menetelmän ylikuormitusta. | Menetelmän ohittaminen tapahtuu kahdessa luokassa, joiden välillä on IS-A-suhde. |
3) Tässä tapauksessa parametrien on oltava erilaisia. | Tässä tapauksessa parametrien on oltava samat. |
83) Voimmeko ohittaa yksityiset menetelmät?
Ei, emme voi ohittaa yksityisiä menetelmiä, koska yksityisten menetelmien laajuus on rajoitettu luokkaan, emmekä voi käyttää niitä luokan ulkopuolella.
84) Voimmeko muuttaa ohitetun menetelmän laajuutta alaluokassa?
Kyllä, voimme muuttaa ohitetun menetelmän laajuutta alaluokassa. Meidän on kuitenkin huomattava, että emme voi vähentää menetelmän saavutettavuutta. Menetelmän käytettävyyttä muuttaessa on otettava huomioon seuraava seikka.
- Yksityinen voidaan muuttaa suojatuksi, julkiseksi tai oletusarvoiseksi.
- Suojattu voidaan muuttaa julkiseksi tai oletusarvoiseksi.
- Oletusasetus voidaan muuttaa julkiseksi.
- Yleisö pysyy aina julkisena.
85) Voimmeko muokata superclass-metodinheittolausetta samalla kun ohitamme sen alaluokassa?
Kyllä, voimme muokata superclass-metodinheittolausetta samalla kun ohitamme sen alaluokassa. On kuitenkin joitain sääntöjä, joita on noudatettava poikkeuksen käsittelyn yhteydessä.
- Jos superclass-metodi ei ilmoita poikkeusta, aliluokan ohitettu menetelmä ei voi ilmoittaa tarkistettua poikkeusta, mutta se voi ilmoittaa valitsemattoman poikkeuksen.
- Jos yliluokka-metodi ilmoittaa poikkeuksen, aliluokan ohitettu menetelmä voi ilmoittaa saman, alaluokkapoikkeuksen tai ei poikkeusta, mutta ei voi ilmoittaa pääpoikkeusta.
86) Mikä on seuraavan Java-ohjelman tulos?
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); } }
Lähtö
Base class method called with integer a = 10
Selitys
Metodi() on ylikuormitettu luokassa Base, kun taas se johdetaan luokassa Derived parametrina double type. Metodikutsussa kokonaisluku välitetään.
87) Voiko Javassa olla virtuaalisia toimintoja?
Kyllä, kaikki Java-toiminnot ovat oletuksena virtuaalisia.
88) Mikä on kovarianttituottotyyppi?
Nyt java5:n jälkeen on mahdollista ohittaa mikä tahansa menetelmä muuttamalla palautustyyppiä, jos alaluokan ohitusmenetelmän palautustyyppi on alaluokkatyyppi. Se tunnetaan kovarianttipalautustyyppinä. Kovariantin palautustyyppi määrittää, että palautustyyppi voi vaihdella samaan suuntaan kuin alaluokka.
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(); } }Testaa nyt
Output: welcome to covariant return typeLisätietoja.
89) Mikä on seuraavan Java-ohjelman tulos?
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(); } }
Lähtö
Derived method called ...
Selitys
Perusluokan menetelmä eli baseMethod() ohitetaan Derived-luokassa. Testiluokassa viitemuuttuja b (tyyppiä Base class) viittaa Derived-luokan esiintymään. Tässä saavutetaan ajonaikainen polymorfismi luokan Base ja Derived välillä. Käännöshetkellä menetelmän baseMethod olemassaolo tarkistetaan Base-luokassa, jos se on, niin käännetty ohjelma muuten näytetään kääntäjävirhe. Tässä tapauksessa baseMethod on perusluokassa; siksi se on käännetty onnistuneesti. Ajon aikana se kuitenkin tarkistaa, onko Derived-luokka ohittanut baseMethod-menetelmän. Jos näin on, kutsutaan Derived-luokkamenetelmää, muuten kutsutaan perusluokkamenetelmää. Tässä tapauksessa Derived-luokka ohittaa baseMethodin; siksi kutsutaan Derived class -metodia.
Core Java - OOPs-käsitteet: viimeiset avainsanahaastattelukysymykset
90) Mikä on lopullinen muuttuja?
Javassa viimeistä muuttujaa käytetään estämään käyttäjää päivittämästä sitä. Jos alustamme lopullisen muuttujan, emme voi muuttaa sen arvoa. Toisin sanoen voidaan sanoa, että lopullista muuttujaa, joka kerran on annettu arvolle, ei voida koskaan muuttaa sen jälkeen. Lopullinen muuttuja, jota ei ole määritetty millekään arvolle, voidaan määrittää vain luokkakonstruktorin kautta.
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 classTestaa nyt
Output:Compile Time ErrorLisätietoja.
91) Mikä on lopullinen menetelmä?
Jos muutamme minkä tahansa menetelmän lopulliseksi menetelmäksi, emme voi ohittaa sitä. Lisätietoja.
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(); } }Testaa nyt
Output:Compile Time Error
92) Mikä on viimeinen luokka?
Jos saamme jonkin luokan lopulliseksi, emme voi periä sitä mihinkään alaluokkaan.
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(); } }Testaa nyt
Output:Compile Time ErrorLisätietoja.
93) Mikä on lopullinen tyhjä muuttuja?
Lopullinen muuttuja, jota ei ole alustettu ilmoitushetkellä, tunnetaan lopullisena tyhjänä muuttujana. Emme voi alustaa lopullista tyhjää muuttujaa suoraan. Sen sijaan meidän on alustettava se luokan rakentajalla. Siitä on hyötyä silloin, kun käyttäjällä on tietoja, joita muut eivät saa muuttaa, esimerkiksi PAN-numero. Harkitse seuraavaa esimerkkiä:
class Student{ int id; String name; final String PAN_CARD_NUMBER; ... }Lisätietoja.
94) Voimmeko alustaa lopullisen tyhjän muuttujan?
Kyllä, jos se ei ole staattinen, voimme alustaa sen rakentajassa. Jos se on staattinen tyhjä lopullinen muuttuja, se voidaan alustaa vain staattisessa lohkossa. Lisätietoja.
95) Voitko julistaa päämenetelmän lopulliseksi?
Kyllä, voimme ilmoittaa päämenetelmän julkiseksi staattiseksi final void main(String[] args){}.
96) Mikä on seuraavan Java-ohjelman tulos?
class Main { public static void main(String args[]){ final int i; i = 20; System.out.println(i); } }
Lähtö
20
Selitys
Koska i on tyhjä lopullinen muuttuja. Se voidaan alustaa vain kerran. Olemme alustaneet sen arvoon 20. Siksi 20 tulostetaan.
97) Mikä on seuraavan Java-ohjelman tulos?
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(); } }
Lähtö
Derived.java:11: error: getInfo() in Derived cannot override getInfo() in Base protected final void getInfo() ^ overridden method is final 1 error
Selitys
GetDetails()-metodi on lopullinen; siksi sitä ei voi ohittaa alaluokassa.
98) Voimmeko julistaa rakentajan lopulliseksi?
Rakentajaa ei voida koskaan julistaa lopulliseksi, koska se ei ole koskaan peritty. Rakentajat eivät ole tavallisia menetelmiä; siksi ei ole mitään järkeä julistaa rakentajia lopullisiksi. Jos kuitenkin yrität tehdä niin, kääntäjä antaa virheilmoituksen.
99) Voimmeko julistaa rajapinnan lopulliseksi?
Ei, emme voi julistaa rajapintaa lopulliseksi, koska rajapinnan on oltava toteutettu jonkin luokan toimesta määrittääkseen sen. Siksi käyttöliittymästä ei ole mitään järkeä tehdä lopullista. Jos yrität kuitenkin tehdä niin, kääntäjä näyttää virheilmoituksen.
100) Mitä eroa on lopullisen menetelmän ja abstraktin menetelmän välillä?
Pääasiallinen ero lopullisen menetelmän ja abstraktin menetelmän välillä on se, että abstrakti menetelmä ei voi olla lopullinen, koska meidän on ohitettava ne alaluokassa antaaksemme sen määritelmän.