logo

300 de întrebări pentru interviu Core Java | Setul 1

90% asigurare a întrebărilor interviului

Există o listă de 300 de întrebări de bază pentru interviul Java. Dacă vi s-a adresat vreo întrebare de bază pentru interviul Java, vă rugăm să o postați în secțiunea de întrebări. Vă asigurăm că veți primi aici cele 90% dintre întrebările și răspunsurile frecvente la interviu.

Răspunsurile la întrebările interviului Core Java sunt scurte și la obiect. Întrebările de bază ale interviului Java sunt clasificate în întrebările de interviu Basics of Java, întrebările de interviu OOP, întrebările de interviu pentru manipularea șirurilor, întrebările de interviu Multithreading, întrebările de interviu de colecție, întrebările de interviu JDBC etc.


1 2 3 4 5

Core Java: Bazele întrebărilor de interviu Java


1) Ce este Java?

Java este la nivel înalt, orientat pe obiecte , limbaj de programare robust, sigur, independent de platformă, de înaltă performanță, cu mai multe fire și limbaj de programare portabil. A fost dezvoltat de James Gosling în iunie 1991. Poate fi cunoscută și ca platformă, deoarece oferă propriul JRE și API.


2) Care sunt diferențele dintre C++ și Java?

Diferentele dintre C++ și Java sunt date în tabelul următor.

Indicele de comparație C++Java
Platforma independenta C++ este dependent de platformă.Java este independent de platformă.
Folosit în principal pentru C++ este folosit în principal pentru programarea sistemului.Java este folosit în principal pentru programarea aplicațiilor. Este utilizat pe scară largă în aplicații ferestre, bazate pe web, pentru întreprinderi și mobile.
Scopul de proiectare C++ a fost conceput pentru programarea sistemelor și aplicațiilor. A fost o extensie a limbaj de programare C .Java a fost proiectat și creat ca interpret pentru sistemele de imprimare, dar mai târziu a fost extins ca suport de calcul de rețea. A fost conceput cu scopul de a fi ușor de utilizat și accesibil unui public mai larg.
Mergi la C++ acceptă declarația goto.Java nu acceptă declarația goto.
Moștenirea multiplă C++ acceptă moștenirea multiplă.Java nu acceptă moștenirea multiplă prin clasă. Se poate realiza prin interfețe în java .
Supraîncărcarea operatorului C++ suportă supraîncărcarea operatorului .Java nu acceptă supraîncărcarea operatorului.
Indicatori C++ acceptă pointeri. Puteți scrie un program pointer în C++.Java acceptă pointer intern. Cu toate acestea, nu puteți scrie programul pointer în java. Înseamnă că Java are suport restricționat pentru pointer în Java.
Compilator și interpret C++ folosește doar compilatorul. C++ este compilat și rulat folosind compilatorul care convertește codul sursă în cod mașină, astfel încât C++ depinde de platformă.Java folosește atât compilatorul, cât și interpretorul. Codul sursă Java este convertit în bytecode în momentul compilării. Interpretul execută acest bytecode în timpul rulării și produce rezultate. Java este interpretat de aceea este independent de platformă.
Apel după valoare și Apel prin referință C++ acceptă atât apelul după valoare, cât și apelul prin referință.Java acceptă apeluri numai după valoare. Nu există apel prin referință în Java.
Structura si Unirea C++ suportă structuri și uniuni.Java nu acceptă structuri și uniuni.
Suport pentru fire C++ nu are suport încorporat pentru fire. Se bazează pe biblioteci terțe pentru suport pentru fire.Java are încorporat fir a sustine.
Comentariu de documentare C++ nu acceptă comentariul de documentație.Java acceptă comentariul documentației (/** ... */) pentru a crea documentație pentru codul sursă java.
Cuvânt cheie virtual C++ acceptă cuvântul cheie virtual, astfel încât să putem decide dacă înlocuim sau nu o funcție.Java nu are un cuvânt cheie virtual. Putem suprascrie toate metodele non-statice în mod implicit. Cu alte cuvinte, metodele non-statice sunt virtuale implicit.
shift dreapta nesemnat >>> C++ nu acceptă operatorul >>>.Java acceptă operatorul de deplasare la dreapta nesemnată >>> care completează zero în partea de sus pentru numerele negative. Pentru numere pozitive, funcționează la fel ca operatorul >>.
Arborele Moștenirii C++ creează întotdeauna un nou arbore de moștenire.Java folosește întotdeauna un singur arbore de moștenire, deoarece toate clasele sunt copii ale clasei Object în java. Clasa de obiecte este rădăcina moştenire arbore în java.
Hardware C++ este mai aproape de hardware.Java nu este atât de interactiv cu hardware-ul.
Orientat pe obiecte C++ este un limbaj orientat pe obiecte. Cu toate acestea, în limbajul C, ierarhia cu o singură rădăcină nu este posibilă.Java este, de asemenea, un orientat pe obiecte limba. Totuși, totul (cu excepția tipurilor fundamentale) este un obiect în Java. Este o singură ierarhie rădăcină, deoarece totul este derivat din java.lang.Object.

3) Enumerați caracteristicile limbajului de programare Java.

Există următoarele caracteristici în limbajul de programare Java.

    Simplu:Java este ușor de învățat. Sintaxa Java se bazează pe C++, ceea ce face mai ușor să scrieți programul în el.
    Orientat pe obiecte:Java urmează paradigma orientată pe obiecte care ne permite să ne menținem codul ca o combinație de diferite tipuri de obiecte care încorporează atât date, cât și comportament.
    Portabil:Java acceptă abordarea citire o dată-scriere oriunde. Putem executa programul Java pe fiecare mașină. Programul Java (.java) este convertit în bytecode (.class) care poate fi rulat cu ușurință pe fiecare mașină.
    Platforma independenta:Java este un limbaj de programare independent de platformă. Este diferit de alte limbaje de programare precum C și C++, care necesită o platformă pentru a fi executată. Java vine cu platforma sa pe care este executat codul său. Java nu depinde de sistemul de operare care urmează să fie executat.
    Securizat:Java este securizat deoarece nu folosește pointeri expliciți. Java oferă, de asemenea, conceptul de gestionare a ByteCode și a excepțiilor, ceea ce îl face mai sigur.
    Robust:Java este un limbaj de programare puternic, deoarece folosește un management puternic al memoriei. Concepte precum colectarea automată a gunoiului, gestionarea excepțiilor etc. îl fac mai robust.
    Arhitectură neutră:Java este neutru din punct de vedere arhitectural, deoarece nu depinde de arhitectură. În C, dimensiunea tipurilor de date poate varia în funcție de arhitectura (32 de biți sau 64 de biți) care nu există în Java.
    Interpretat:Java folosește interpretul Just-in-time (JIT) împreună cu compilatorul pentru execuția programului.
    Performanta ridicata:Java este mai rapid decât alte limbaje tradiționale de programare interpretate, deoarece bytecode Java este „aproape” de codul nativ. Este încă puțin mai lent decât un limbaj compilat (de exemplu, C++).
    Multifile:Putem scrie programe Java care se ocupă de multe sarcini în același timp prin definirea mai multor fire. Principalul avantaj al multi-threading-ului este că nu ocupă memorie pentru fiecare thread. Împărtășește o zonă de memorie comună. Threadurile sunt importante pentru aplicații multimedia, web etc.
    Distribuit:Java este distribuit deoarece facilitează utilizatorilor să creeze aplicații distribuite în Java. RMI și EJB sunt folosite pentru crearea de aplicații distribuite. Această caracteristică a Java ne face capabili să accesăm fișiere apelând metodele de pe orice mașină de pe internet.
    Dinamic:Java este un limbaj dinamic. Acceptă încărcarea dinamică a claselor. Înseamnă că clasele sunt încărcate la cerere. De asemenea, acceptă funcții din limbile sale native, adică C și C++.

4) Ce înțelegeți prin mașină virtuală Java?

Mașină virtuală Java este o mașină virtuală care permite computerului să ruleze programul Java. JVM acționează ca un motor de rulare care apelează metoda principală prezentă în codul Java. JVM este specificația care trebuie implementată în sistemul informatic. Codul Java este compilat de JVM pentru a fi un Bytecode care este independent de mașină și apropiat de codul nativ.


5) Care este diferența dintre JDK, JRE și JVM?

JVM

JVM este un acronim pentru Java Virtual Machine; este o mașină abstractă care oferă mediul de rulare în care poate fi executat bytecode Java. Este o specificație care specifică funcționarea mașinii virtuale Java. Implementarea sa a fost asigurată de Oracle și alte companii. Implementarea sa este cunoscută ca JRE.

JVM-urile sunt disponibile pentru multe platforme hardware și software (deci JVM depinde de platformă). Este o instanță de rulare care este creată atunci când rulăm clasa Java. Există trei noțiuni ale JVM: specificație, implementare și instanță.

JRE

JRE înseamnă Java Runtime Environment. Este implementarea JVM. Java Runtime Environment este un set de instrumente software care sunt utilizate pentru dezvoltarea aplicațiilor Java. Este folosit pentru a furniza mediul de rulare. Este implementarea JVM. Ea există fizic. Conține un set de biblioteci + alte fișiere pe care JVM le folosește în timpul rulării.

JDK

JDK este un acronim pentru Java Development Kit. Este un mediu de dezvoltare software care este folosit pentru a dezvolta aplicații și applet-uri Java. Ea există fizic. Conține instrumente de dezvoltare JRE +. JDK este o implementare a oricăreia dintre platformele Java date de mai jos, lansate de Oracle Corporation:

  • Platformă Java ediție standard
  • Platforma Java Enterprise Edition
  • Platforma Java Micro Edition
Mai multe detalii.

6) Câte tipuri de zone de memorie sunt alocate de JVM?

Multe tipuri:

    Zona de clasă (metodă):Zona de clasă stochează structuri pe clasă, cum ar fi pool-ul de constante de rulare, câmpul, datele metodei și codul pentru metode.Morman:Este zona de date de rulare în care memoria este alocată obiectelorGrămadă:Java Stack stochează cadre. Acesta conține variabile locale și rezultate parțiale și joacă un rol în invocarea și returnarea metodei. Fiecare thread are o stivă JVM privată, creată în același timp cu firul. Un nou cadru este creat de fiecare dată când este invocată o metodă. Un cadru este distrus când se încheie invocarea metodei sale.Registrul contorului programului:Registrul PC (contor de programe) conține adresa instrucțiunii mașinii virtuale Java în curs de executare.Stiva de metode native:Conține toate metodele native utilizate în aplicație.
Mai multe detalii.

7) Ce este compilatorul JIT?

Compilatorul Just-In-Time(JIT): Este folosit pentru a îmbunătăți performanța. JIT compilează părți ale bytecode care au funcționalități similare în același timp și, prin urmare, reduce timpul necesar pentru compilare. Aici termenul de compilator se referă la un traducător de la setul de instrucțiuni al unei mașini virtuale Java (JVM) la setul de instrucțiuni al unui anumit CPU.


8) Ce este platforma?

O platformă este mediul hardware sau software în care este executată o bucată de software. Există două tipuri de platforme, bazate pe software și bazate pe hardware. Java oferă platforma bazată pe software.


9) Care sunt principalele diferențe dintre platforma Java și alte platforme?

Există următoarele diferențe între platforma Java și alte platforme.

  • Java este platforma bazată pe software, în timp ce alte platforme pot fi platforme hardware sau platforme bazate pe software.
  • Java este executat pe partea de sus a altor platforme hardware, în timp ce alte platforme pot avea doar componente hardware.

10) Ce îi dă lui Java natura „scrie o dată și rulează oriunde”?

Codul octet. Compilatorul Java convertește programele Java în fișierul de clasă (Byte Code) care este limbajul intermediar între codul sursă și codul mașină. Acest bytecode nu este specific platformei și poate fi executat pe orice computer.


11) Ce este classloader?

Classloader este un subsistem JVM care este folosit pentru a încărca fișiere de clasă. Ori de câte ori rulăm programul java, acesta este încărcat mai întâi de classloader. Există trei classloadere încorporate în Java.

    Bootstrap ClassLoader: Acesta este primul classloader care este superclasa Extension classloader. Încarcă rt.jar fișier care conține toate fișierele de clasă ale Java Standard Edition, cum ar fi clasele de pachete java.lang, clasele de pachete java.net, clasele de pachete java.util, clasele de pachete java.io, clasele de pachete java.sql etc.Extensie ClassLoader: Acesta este încărcătorul de clasă copil al Bootstrap și încărcătorul de clasă părinte al încărcătorul de clasă System. Încarcă fișierele jar aflate în interior $JAVA_HOME/jre/lib/ext director.Sistem/Aplicație ClassLoader: Acesta este elementul de încărcare de clasă secundar al Extension classloader. Încarcă fișierele de clasă din classpath. În mod implicit, calea clasei este setată la directorul curent. Puteți schimba calea clasei folosind comutatorul „-cp” sau „-classpath”. Este, de asemenea, cunoscut sub numele de aplicație classloader.

12) Este Empty .java file name un nume de fișier sursă valid?

Da, Java permite salvarea fișierului nostru java prin .java numai, trebuie să-l compilam de javac .java și alergat de nume de clasă java Să luăm un exemplu simplu:

 //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 

compilați-l de javac .java

rulează-l pe lângă java A


13) Este cuvântul cheie delete, next, main, exit sau null în java?

Nu.


14) Dacă nu ofer niciun argument pe linia de comandă, atunci ce valoare stocată în matricea String va fi trecută în metoda main(), goală sau NULL?

Este gol, dar nu nul.


15) Ce se întâmplă dacă scriu static public void în loc de public static void?

Programul se compilează și rulează corect, deoarece ordinea specificatorilor nu contează în Java.


16) Care este valoarea implicită a variabilelor locale?

Variabilele locale nu sunt inițializate la nicio valoare implicită, nici primitive, nici referințe la obiect.


17) Care sunt diferiții specificatori de acces în Java?

În Java, specificatorii de acces sunt cuvintele cheie care sunt utilizate pentru a defini domeniul de acces al metodei, clasei sau unei variabile. În Java, există patru specificatori de acces indicați mai jos.

    PublicClasele, metodele sau variabilele care sunt definite ca publice pot fi accesate de orice clasă sau metodă.ProtejatProtejat poate fi accesat de clasa aceluiași pachet, sau de subclasa din această clasă, sau în cadrul aceleiași clase.Mod implicitImplicit sunt accesibile numai în cadrul pachetului. În mod implicit, toate clasele, metodele și variabilele sunt în domeniul implicit.PrivatClasa privată, metodele sau variabilele definite ca private pot fi accesate numai în cadrul clasei.

18) Care este scopul metodelor și variabilelor statice?

Metodele sau variabilele definite ca statice sunt partajate între toate obiectele clasei. Statica este partea clasei și nu a obiectului. Variabilele statice sunt stocate în zona de clasă și nu este nevoie să creăm obiectul pentru a accesa astfel de variabile. Prin urmare, static este folosit în cazul în care trebuie să definim variabile sau metode care sunt comune tuturor obiectelor clasei.

De exemplu, în clasa care simulează colecția studenților dintr-o facultate, numele colegiului este atributul comun tuturor studenților. Prin urmare, numele colegiului va fi definit ca static .


19) Care sunt avantajele pachetelor în Java?

Există diverse avantaje ale definirii pachetelor în Java.

  • Pachetele evită ciocnirile de nume.
  • Pachetul oferă un control al accesului mai ușor.
  • Putem avea și clasele ascunse care nu sunt vizibile în exterior și utilizate de pachet.
  • Este mai ușor să localizați clasele aferente.

20) Care este rezultatul următorului program Java?

 class Test { public static void main (String args[]) { System.out.println(10 + 20 + 'Javatpoint'); System.out.println('Javatpoint' + 10 + 20); } } 

Ieșirea codului de mai sus va fi

 30Javatpoint Javatpoint1020 

Explicaţie

În primul caz, 10 și 20 sunt tratate ca numere și adăugate pentru a fi 30. Acum, suma lor 30 este tratată ca șir și concatenată cu șirul Javatpoint . Prin urmare, rezultatul va fi 30Javatpoint .

În al doilea caz, șirul Javatpoint este concatenat cu 10 pentru a fi șirul Javatpoint10 care va fi apoi concatenat cu 20 to be Javatpoint1020 .


21) Care este rezultatul următorului program Java?

 class Test { public static void main (String args[]) { System.out.println(10 * 20 + 'Javatpoint'); System.out.println('Javatpoint' + 10 * 20); } } 

Ieșirea codului de mai sus va fi

 200Javatpoint Javatpoint200 

Explicaţie

În primul caz, numerele 10 și 20 vor fi înmulțite mai întâi și apoi rezultatul 200 este tratat ca șir și concatenat cu șirul Javatpoint pentru a produce rezultatul 200Javatpoint .

În al doilea caz, numerele 10 și 20 vor fi înmulțite mai întâi pentru a fi 200, deoarece precedența înmulțirii este mai mare decât adunarea. Rezultatul 200 va fi tratat ca șir și concatenat cu șirul Javatpoint pentru a produce ieșirea ca Javatpoint200 .


22) Care este rezultatul următorului program Java?

 class Test { public static void main (String args[]) { for(int i=0; 0; i++) { System.out.println('Hello Javatpoint'); } } } 

Codul de mai sus va da eroarea de compilare, deoarece bucla for solicită o valoare booleană în a doua parte și oferim o valoare întreagă, adică 0.


Core Java - Concepte OOPs: Întrebări inițiale de interviu OOPs

Sunt oferite peste 50 de întrebări de interviu OOP (Programare și sistem orientate pe obiecte). Cu toate acestea, ele au fost clasificate în multe secțiuni, cum ar fi întrebările interviului pentru constructor, întrebările interviului statice, întrebările interviului privind moștenirea, întrebarea interviului abstracția, întrebările interviului polimorfism etc. pentru o mai bună înțelegere.


23) Ce este paradigma orientată pe obiecte?

Este o paradigmă de programare bazată pe obiecte având date și metode definite în clasa căreia îi aparține. Paradigma orientată pe obiect își propune să încorporeze avantajele modularității și reutilizabilității. Obiectele sunt instanțele claselor care interacționează între ele pentru a proiecta aplicații și programe. Există următoarele caracteristici ale paradigmei orientate pe obiecte.

  • Urmează abordarea de jos în sus în proiectarea programelor.
  • Concentrați-vă pe date cu metode de a opera asupra datelor obiectului
  • Include conceptul precum Encapsulare și abstractizare care ascunde complexitățile de utilizator și arată doar funcționalitatea.
  • Implementează abordarea în timp real, cum ar fi moștenirea, abstracția etc.
  • Exemplele de paradigmă orientată pe obiecte sunt C++, Simula, Smalltalk, Python, C# etc.

24) Ce este un obiect?

Obiectul este entitatea în timp real care are o anumită stare și comportament. În Java, Object este o instanță a clasei având variabilele de instanță ca stare a obiectului și metodele ca comportament al obiectului. Obiectul unei clase poate fi creat folosind nou cuvânt cheie.


25) Care este diferența dintre un limbaj de programare orientat pe obiecte și un limbaj de programare bazat pe obiecte?

Există următoarele diferențe de bază între limbajul orientat pe obiect și limbajul bazat pe obiecte.

  • Limbile orientate pe obiecte urmează toate conceptele de POO, în timp ce limbajul bazat pe obiecte nu urmează toate conceptele de POO, cum ar fi moștenirea și polimorfismul.
  • Limbile orientate pe obiecte nu au obiectele încorporate, în timp ce limbajele bazate pe obiecte au obiectele încorporate, de exemplu, JavaScript are obiect fereastră.
  • Exemple de programare orientată pe obiecte sunt Java, C#, Smalltalk etc., în timp ce exemplele de limbaje bazate pe obiecte sunt JavaScript, VBScript etc.

26) Care va fi valoarea inițială a unei referințe de obiect care este definită ca o variabilă de instanță?

Toate referințele la obiect sunt inițializate la null în Java.


Core Java - Concepte OOPs: Întrebări de interviu pentru constructori


27) Ce este constructorul?

Constructorul poate fi definit ca tipul special de metodă care este utilizat pentru a inițializa starea unui obiect. Este invocat atunci când clasa este instanțiată, iar memoria este alocată obiectului. De fiecare dată, un obiect este creat folosind nou cuvânt cheie, constructorul implicit al clasei este apelat. Numele constructorului trebuie să fie similar cu numele clasei. Constructorul nu trebuie să aibă un tip de returnare explicit.

Mai multe detalii.

28) Câte tipuri de constructori sunt utilizați în Java?

Pe baza parametrilor trecuți în constructori, există două tipuri de constructori în Java.

    Constructor implicit:constructorul implicit este cel care nu acceptă nicio valoare. Constructorul implicit este folosit în principal pentru a inițializa variabila de instanță cu valorile implicite. Poate fi folosit, de asemenea, pentru realizarea unor sarcini utile în crearea obiectelor. Un constructor implicit este invocat implicit de către compilator dacă nu există niciun constructor definit în clasă.Constructor parametrizat:Constructorul parametrizat este cel care poate inițializa variabilele de instanță cu valorile date. Cu alte cuvinte, putem spune că constructorii care pot accepta argumentele se numesc constructori parametrizați.
Constructori Java

29) Care este scopul unui constructor implicit?

Scopul constructorului implicit este de a atribui obiectelor valoarea implicită. Compilatorul java creează implicit un constructor implicit dacă nu există niciun constructor în clasă.

 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(); } } 
Testează-l acum

Ieșire:

 0 null 0 null 

Explicaţie: În clasa de mai sus, nu creați niciun constructor, așa că compilatorul vă oferă un constructor implicit. Aici valorile 0 și nule sunt furnizate de constructorul implicit.

Constructor implicit Java
Mai multe detalii.

30) Constructorul returnează vreo valoare?

Ani: da, constructorul returnează implicit instanța curentă a clasei (nu puteți utiliza un tip de returnare explicit cu constructorul). Mai multe detalii.


31) Constructorul este moștenit?

Nu, constructorul nu este moștenit.


32) Puteți face o finală de constructor?

Nu, constructorul nu poate fi final.

indicii în c

33) Putem supraîncărca constructorii?

Da, constructorii pot fi supraîncărcați prin modificarea numărului de argumente acceptate de constructor sau prin modificarea tipului de date al parametrilor. Luați în considerare următorul exemplu.

 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); } } 

În programul de mai sus, constructorul Test este supraîncărcat cu un alt constructor. În primul apel către constructor, constructorul cu un argument este apelat, iar i va fi inițializat cu valoarea 10. Totuși, în al doilea apel către constructor, constructorul cu cele 2 argumente este apelat și i va fi inițializat cu valoarea 15.


34) Ce înțelegeți prin constructor de copiere în Java?

Nu există un constructor de copiere în java. Cu toate acestea, putem copia valorile de la un obiect la altul ca un constructor de copiere în C++.

Există multe modalități de a copia valorile unui obiect în altul în java. Sunt:

  • Prin constructor
  • Prin atribuirea valorilor unui obiect altuia
  • Prin metoda clone() a clasei Object

În acest exemplu, vom copia valorile unui obiect în altul folosind constructorul java.

 //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(); } } 
Testează-l acum

Ieșire:

 111 Karan 111 Karan 

35) Care sunt diferențele dintre constructori și metode?

Există multe diferențe între constructori și metode. Ele sunt date mai jos.

Constructor JavaMetoda Java
Un constructor este folosit pentru a inițializa starea unui obiect.O metodă este folosită pentru a expune comportamentul unui obiect.
Un constructor nu trebuie să aibă un tip de returnare.O metodă trebuie să aibă un tip de returnare.
Constructorul este invocat implicit.Metoda este invocată în mod explicit.
Compilatorul Java oferă un constructor implicit dacă nu aveți niciun constructor într-o clasă.Metoda nu este furnizată de compilator în niciun caz.
Numele constructorului trebuie să fie același cu numele clasei.Numele metodei poate fi sau nu același cu numele clasei.

Constructori Java vs Metode

36) Care este rezultatul următorului program Java?

 public class Test { Test(int a, int b) { System.out.println('a = '+a+' b = '+b); } Test(int a, float b) { System.out.println('a = '+a+' b = '+b); } public static void main (String args[]) { byte a = 10; byte b = 15; Test test = new Test(a,b); } } 

Ieșirea următorului program este:

 a = 10 b = 15 

Aici, tipul de date al variabilelor a și b, adică octetul este promovat la int și este apelat primul constructor parametrizat cu cei doi parametri întregi.


37) Care este rezultatul următorului program Java?

 class Test { int i; } public class Main { public static void main (String args[]) { Test test = new Test(); System.out.println(test.i); } } 

Ieșirea programului este 0 deoarece variabila i este inițializată la 0 intern. După cum știm că un constructor implicit este invocat implicit dacă nu există niciun constructor în clasă, variabila i este inițializată la 0 deoarece nu există niciun constructor în clasă.


38) Care este rezultatul următorului program Java?

 class Test { int test_a, test_b; Test(int a, int b) { test_a = a; test_b = b; } public static void main (String args[]) { Test test = new Test(); System.out.println(test.test_a+' '+test.test_b); } } 

Este un eroare de compilator în program deoarece există un apel la constructorul implicit în metoda principală care nu este prezent în clasă. Cu toate acestea, există un singur constructor parametrizat în clasa Test. Prin urmare, niciun constructor implicit nu este invocat de către constructor implicit.


Core Java - Concepte OOP: cuvânt cheie static Întrebări interviu


39) Care este variabila statică?

Variabila statică este folosită pentru a se referi la proprietatea comună a tuturor obiectelor (care nu este unică pentru fiecare obiect), de exemplu, numele companiei angajaților, numele colegiului al studenților etc. Variabila statică primește memorie o singură dată în zona de clasă la timpul de încărcare a clasei. Utilizarea unei variabile statice face ca programul dvs. să fie mai eficient în memorie (economisește memorie). Variabila statică aparține mai degrabă clasei decât obiectului.

 //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(); } } 
Testează-l acum
 Output:111 Karan ITS 222 Aryan ITS 

Mai multe detalii.

40) Ce este metoda statică?

  • O metodă statică aparține mai degrabă clasei decât obiectului.
  • Nu este nevoie să creați obiectul pentru a apela metodele statice.
  • O metodă statică poate accesa și modifica valoarea variabilei statice.
Mai multe detalii.

41) Care sunt restricțiile care se aplică metodelor statice Java?

Două restricții principale sunt aplicate metodelor statice.

  • Metoda statică nu poate folosi un membru de date non-static sau apela direct metoda non-statică.
  • this și super nu pot fi folosite în context static deoarece sunt non-statice.

42) De ce metoda principală este statică?

Deoarece obiectul nu este necesar să apeleze metoda statică. Dacă facem ca metoda principală să fie nestatică, JVM va trebui să-și creeze mai întâi obiectul și apoi să apeleze metoda main(), ceea ce va duce la alocarea suplimentară de memorie. Mai multe detalii.


43) Putem suprascrie metodele statice?

Nu, nu putem trece peste metodele statice.

44) Ce este blocul static?

Blocul static este utilizat pentru a inițializa membrul de date static. Se execută înainte de metoda principală, în momentul încărcării clasei.

 class A2{ static{System.out.println('static block is invoked');} public static void main(String args[]){ System.out.println('Hello main'); } } 
Testează-l acum
 Output: static block is invoked Hello main 

Mai multe detalii.

45) Putem executa un program fără metoda main()?

Răspuns) Nu, a fost posibil înainte de JDK 1.7 folosind blocul static. De la JDK 1.7, nu este posibil. Mai multe detalii.


46) Ce se întâmplă dacă modificatorul static este eliminat din semnătura metodei principale?

Programul se compila. Cu toate acestea, în timpul execuției, se afișează o eroare „NoSuchMethodError”.


47) Care este diferența dintre metoda statică (clasă) și metoda instanței?

metoda statică sau de clasămetoda instanței
1) O metodă care este declarată ca statică este cunoscută ca metoda statică.O metodă care nu este declarată ca fiind statică este cunoscută ca metoda instanței.
2) Nu trebuie să creăm obiectele pentru a apela metodele statice.Obiectul este necesar pentru a apela metodele de instanță.
3) Membrii nestatici (instanță) nu pot fi accesați direct în context static (metodă statică, bloc static și clasă imbricată statică).Ambele variabile statice și non-statice pot fi accesate în metodele de instanță.
4) De exemplu: public static int cube(int n){ return n*n*n;}De exemplu: public void msg(){...}.

48) Putem face constructori statici?

După cum știm că contextul static (metodă, bloc sau variabilă) aparține clasei, nu obiectului. Deoarece constructorii sunt invocați numai atunci când obiectul este creat, nu are sens să faceți constructorii statici. Cu toate acestea, dacă încercați să faceți acest lucru, compilatorul va afișa eroarea compilatorului.


49) Putem face metodele abstracte statice în Java?

În Java, dacă facem metodele abstracte statice, va deveni o parte a clasei și o putem numi direct ceea ce este inutil. Apelarea unei metode nedefinite este complet inutilă, prin urmare nu este permisă.


50) Putem declara variabilele și metodele statice într-o clasă abstractă?

Da, putem declara variabile și metode statice într-o metodă abstractă. Deoarece știm că nu există nicio cerință de a face obiectul să acceseze contextul static, prin urmare, putem accesa contextul static declarat în interiorul clasei abstracte folosind numele clasei abstracte. Luați în considerare următorul exemplu.

 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); } } 

Ieșire

 hi !! I am good !! i = 102 

Core Java - Concepte OOPs: Întrebări de interviu privind moștenirea


51) Ce este acest cuvânt cheie în java?

The acest cuvântul cheie este o variabilă de referință care se referă la obiectul curent. Există diverse utilizări ale acestui cuvânt cheie în Java. Poate fi folosit pentru a se referi la proprietățile clasei curente, cum ar fi metode de instanță, variabile, constructori etc. Poate fi, de asemenea, transmis ca argument în metode sau constructori. De asemenea, poate fi returnat de la metodă ca instanță de clasă curentă.

java acest cuvânt cheie
Mai multe detalii.

52) Care sunt principalele utilizări ale acestui cuvânt cheie?

Există următoarele utilizări ale acest cuvânt cheie.

    acestpoate fi folosit pentru a se referi la variabila de instanță a clasei curente.acestpoate fi folosit pentru a invoca metoda clasei curente (implicit)acest()poate fi folosit pentru a invoca constructorul de clasă curent.acestpoate fi transmis ca argument în apelul de metodă.acestpoate fi transmis ca argument în apelul constructorului.acestpoate fi folosit pentru a returna instanța de clasă curentă din metodă.

53) Putem atribui referința la acest variabil?

Nu, aceasta nu poate fi atribuită nici unei valori, deoarece indică întotdeauna obiectul de clasă curent și aceasta este referința finală în Java. Totuși, dacă încercăm să facem acest lucru, va fi afișată eroarea compilatorului. Luați în considerare următorul exemplu.

 public class Test { public Test() { this = null; System.out.println('Test class constructor called'); } public static void main (String args[]) { Test t = new Test(); } } 

Ieșire

 Test.java:5: error: cannot assign a value to final variable this this = null; ^ 1 error 

54) Can acest cuvântul cheie să fie folosit pentru a trimite membri statici?

Da, este posibil să folosiți acest cuvânt cheie pentru a trimite membri statici, deoarece aceasta este doar o variabilă de referință care se referă la obiectul clasei curente. Cu toate acestea, deoarece știm că, nu este necesar să accesați variabile statice prin obiecte, prin urmare, nu este cea mai bună practică să utilizați acest lucru pentru a trimite membri statici. Luați în considerare următorul exemplu.

 public class Test { static int i = 10; public Test () { System.out.println(this.i); } public static void main (String args[]) { Test t = new Test(); } } 

Ieșire

 10 

55) Cum se poate realiza înlănțuirea constructorului folosind acest cuvânt cheie?

Înlănțuirea constructorului ne permite să apelăm un constructor de la un alt constructor al clasei în raport cu obiectul clasei curente. Putem folosi acest cuvânt cheie pentru a efectua înlănțuirea constructorului în cadrul aceleiași clase. Luați în considerare următorul exemplu care ilustrează cum putem folosi acest cuvânt cheie pentru a realiza înlănțuirea constructorului.

 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); } } 

Ieșire

 ID: 105 Name:Vikas age:22 address: Delhi 

56) Care sunt avantajele trecerii acestui lucru într-o metodă în locul obiectului de clasă curent în sine?

După cum știm, că acesta se referă la obiectul de clasă curent, prin urmare, trebuie să fie similar cu obiectul de clasă curent. Cu toate acestea, pot exista două avantaje principale de a trece acest lucru într-o metodă în locul obiectului de clasă curent.

  • aceasta este o variabilă finală. Prin urmare, aceasta nu poate fi atribuită nici unei valori noi, în timp ce obiectul de clasă curent ar putea să nu fie final și poate fi modificat.
  • aceasta poate fi folosită în blocul sincronizat.

57) Ce este Moștenirea?

Moștenirea este un mecanism prin care un obiect dobândește toate proprietățile și comportamentul altui obiect dintr-o altă clasă. Este folosit pentru reutilizarea codului și suprascrierea metodei. Ideea din spatele moștenirii în Java este că puteți crea clase noi care sunt construite pe clasele existente. Când moșteniți dintr-o clasă existentă, puteți reutiliza metode și câmpuri ale clasei părinte. Mai mult, puteți adăuga noi metode și câmpuri și în clasa dvs. curentă. Moștenirea reprezintă relația IS-A care este cunoscută și ca relație părinte-copil.

Există cinci tipuri de moștenire în Java.

  • Moștenire pe un singur nivel
  • Moștenire pe mai multe niveluri
  • Moștenirea multiplă
  • Moștenirea ierarhică
  • Moștenirea hibridă

Moștenirea multiplă nu este acceptată în Java prin clasă.

Mai multe detalii.

58) De ce este folosită moștenirea în Java?

Există diverse avantaje ale utilizării moștenirii în Java, care sunt prezentate mai jos.

  • Moștenirea asigură reutilizarea codului. Clasa derivată nu trebuie să redefinească metoda clasei de bază decât dacă trebuie să furnizeze implementarea specifică a metodei.
  • Polimorfismul runtime nu poate fi realizat fără utilizarea moștenirii.
  • Putem simula moștenirea claselor cu obiectele în timp real, ceea ce face OOP-urile mai realiste.
  • Moștenirea oferă ascunderea datelor. Clasa de bază poate ascunde unele date din clasa derivată făcând-o privată.
  • Depășirea metodei nu poate fi realizată fără moștenire. Prin suprascrierea metodei, putem oferi o implementare specifică a unei metode de bază conținute de clasa de bază.

59) Care clasă este superclasa pentru toate clasele?

Clasa obiect este superclasa tuturor celorlalte clase din Java.


60) De ce moștenirea multiplă nu este acceptată în java?

Pentru a reduce complexitatea și a simplifica limbajul, moștenirea multiplă nu este acceptată în java. Luați în considerare un scenariu în care A, B și C sunt trei clase. Clasa C moștenește clasele A și B. Dacă clasele A și B au aceeași metodă și o numiți din obiectul clasei copil, va exista ambiguitate în a apela metoda clasei A sau B.

Deoarece erorile de timp de compilare sunt mai bune decât erorile de rulare, Java redă o eroare de timp de compilare dacă moșteniți 2 clase. Deci, indiferent dacă aveți aceeași metodă sau diferită, va exista o eroare de timp de compilare.

 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? } } 
Testează-l acum
 Compile Time Error 

61) Ce este agregarea?

Agregarea poate fi definită ca relația dintre două clase în care clasa agregată conține o referință la clasa pe care o deține. Agregarea este cel mai bine descrisă ca a are o relaţie. De exemplu, Clasa agregată Angajat care are diverse câmpuri, cum ar fi vârsta, numele și salariul, conține, de asemenea, un obiect din clasa Adresă, care are diverse câmpuri, cum ar fi Adresa-Linia 1, Orașul, Statul și codul PIN. Cu alte cuvinte, putem spune că Employee (clasa) are un obiect al clasei Address. Luați în considerare următorul exemplu.

Adresă.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; } } 

Angajat.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(); } } 

Ieșire

 111 varun gzb UP india 112 arun gno UP india 

62) Ce este compoziția?

Menținerea referinței unei clase în cadrul unei alte clase este cunoscută sub numele de compoziție. Când un obiect conține celălalt obiect, dacă obiectul conținut nu poate exista fără existența obiectului container, atunci se numește compoziție. Cu alte cuvinte, putem spune că compoziția este cazul particular de agregare care reprezintă o relație mai puternică între două obiecte. Exemplu: O clasă conține elevi. Un elev nu poate exista fără clasă. Există o compoziție între clasă și elevi.


63) Care este diferența dintre agregare și compoziție?

Agregarea reprezintă relația slabă, în timp ce compoziția reprezintă relația puternică. De exemplu, bicicleta are un indicator (agregare), dar bicicleta are un motor (compoziție).


64) De ce Java nu acceptă pointerii?

Pointerul este o variabilă care se referă la adresa de memorie. Ele nu sunt folosite în Java deoarece sunt nesigure (nesecurizate) și complexe de înțeles.


65) Ce este super în java?

The super cuvântul cheie în Java este o variabilă de referință care este folosită pentru a se referi la obiectul clasei părinte imediate. Ori de câte ori creați o instanță a subclasei, este creată implicit o instanță a clasei părinte care este referită prin variabila super referință. Super() este apelat implicit în constructorul clasei de către compilator dacă nu există super sau acesta.

 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(); } } 
Testează-l acum

Ieșire:

 animal is created dog is created 
Mai multe detalii.

66) Cum se poate realiza înlănțuirea constructorului folosind cuvântul cheie super?

 class Person { String name,address; int age; public Person(int age, String name, String address) { this.age = age; this.name = name; this.address = address; } } class Employee extends Person { float salary; public Employee(int age, String name, String address, float salary) { super(age,name,address); this.salary = salary; } } public class Test { public static void main (String args[]) { Employee e = new Employee(22, 'Mukesh', 'Delhi', 90000); System.out.println('Name: '+e.name+' Salary: '+e.salary+' Age: '+e.age+' Address: '+e.address); } } 

Ieșire

 Name: Mukesh Salary: 90000.0 Age: 22 Address: Delhi 

67) Care sunt principalele utilizări ale cuvântului cheie super?

Există următoarele utilizări ale cuvântului cheie super.

  • super poate fi folosit pentru a se referi la variabila de instanță a clasei părinte imediate.
  • super poate fi folosit pentru a invoca metoda clasei părinte imediate.
  • super() poate fi folosit pentru a invoca constructorul imediat al clasei părinte.

68) Care sunt diferențele dintre acest cuvânt cheie și super-cheie?

Există următoarele diferențe între acest cuvânt și super-cheie.

  • Cuvântul cheie super indică întotdeauna contextul clasei părinte, în timp ce acest cuvânt cheie indică întotdeauna contextul clasei curente.
  • Cuvântul cheie super este folosit în primul rând pentru inițializarea variabilelor clasei de bază în constructorul de clasă derivată, în timp ce acest cuvânt cheie este folosit în principal pentru a diferenția între variabilele locale și de instanță atunci când este transmis în constructorul de clasă.
  • Super și aceasta trebuie să fie prima declarație din constructor, altfel compilatorul va arunca o eroare.

69) Care este rezultatul următorului program Java?

 class Person { public Person() { System.out.println('Person class constructor called'); } } public class Employee extends Person { public Employee() { System.out.println('Employee class constructor called'); } public static void main (String args[]) { Employee e = new Employee(); } } 

Ieșire

 Person class constructor called Employee class constructor called 

Explicaţie

Super() este invocat implicit de compilator dacă niciun super() sau this() nu este inclus în mod explicit în constructorul de clasă derivată. Prin urmare, în acest caz, constructorul clasei Persoană este apelat mai întâi și apoi constructorul clasei Angajat.


70) Puteți folosi this() și super() ambele într-un constructor?

Nu, deoarece this() și super() trebuie să fie prima instrucțiune din constructorul clasei.

Exemplu:

 public class Test{ Test() { super(); this(); System.out.println('Test class object is created'); } public static void main(String []args){ Test t = new Test(); } } 

Ieșire:

 Test.java:5: error: call to this must be first statement in constructor 

71) Ce este clonarea obiectelor?

Clonarea obiectului este folosită pentru a crea copia exactă a unui obiect. Metoda clone() a clasei Object este folosită pentru a clona un obiect. The java.lang.Cloneable interfața trebuie implementată de clasa a cărei clonă de obiect dorim să o creăm. Dacă nu implementăm interfața Cloneable, metoda clone() generează CloneNotSupportedException.

 protected Object clone() throws CloneNotSupportedException 
Mai multe detalii.

Core Java - Concepte OOPs: Întrebări de interviu de supraîncărcare a metodei


72) Ce este supraîncărcarea metodei?

Supraîncărcarea metodelor este tehnica polimorfismului care ne permite să creăm mai multe metode cu același nume, dar semnătură diferită. Putem realiza supraîncărcarea metodei în două moduri.

  • Prin Schimbarea numărului de argumente
  • Prin Schimbarea tipului de date al argumentelor

Supraîncărcarea metodei crește lizibilitatea programului. Supraîncărcarea metodei este efectuată pentru a înțelege rapid programul.

Mai multe detalii.

73) De ce nu este posibilă supraîncărcarea metodei prin schimbarea tipului de returnare în java?

În Java, supraîncărcarea metodei nu este posibilă prin schimbarea tipului de returnare al programului pentru a evita ambiguitatea.

 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 }} 
Testează-l acum

Ieșire:

 Compile Time Error: method add(int, int) is already defined in class Adder 
Mai multe detalii.

74) Putem supraîncărca metodele făcându-le statice?

Nu, nu putem supraîncărca metodele doar aplicând cuvântul cheie static acestora (numărul de parametri și tipuri sunt aceleași). Luați în considerare următorul exemplu.

 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); } } 

Ieșire

 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) Putem supraîncărca metoda main()?

Da, putem avea orice număr de metode principale într-un program Java utilizând supraîncărcarea metodelor.

Mai multe detalii.

76) Ce este supraîncărcarea metodei cu promovarea tipului?

Promovarea prin tip este o supraîncărcare a metodei, ne referim la faptul că un tip de date poate fi promovat la altul implicit dacă nu se găsește o potrivire exactă.

Supraîncărcarea metodei Java cu promovarea tipului

După cum este afișat în diagrama de mai sus, octetul poate fi promovat la short, int, long, float sau double. Tipul de date scurt poate fi promovat la int, long, float sau double. Tipul de date char poate fi promovat la int, long, float sau double și așa mai departe. Luați în considerare următorul exemplu.

 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); } } 
Testează-l acum

Ieșire

 40 60 

77) Care este rezultatul următorului program Java?

 class OverloadingCalculation3{ void sum(int a,long b){System.out.println('a method invoked');} void sum(long a,int b){System.out.println('b method invoked');} public static void main(String args[]){ OverloadingCalculation3 obj=new OverloadingCalculation3(); obj.sum(20,20);//now ambiguity } } 

Ieșire

 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 

Explicaţie

Există două metode definite cu același nume, adică suma. Prima metodă acceptă tipul întreg și lung, în timp ce a doua metodă acceptă tipul lung și întreg. Parametrul trecut care sunt a = 20, b = 20. Nu putem spune ce metodă va fi numită deoarece nu există nicio diferențiere clară menționată între literal întreg și literal lung. Acesta este cazul ambiguității. Prin urmare, compilatorul va arunca o eroare.


Core Java - Concepte OOPs: Întrebări de interviu de înlocuire a metodei


78) Ce este anularea metodei:

Dacă o subclasă oferă o implementare specifică a unei metode care este deja furnizată de clasa sa părinte, aceasta este cunoscută sub numele de Suprascrierea metodei. Este folosit pentru polimorfismul runtime și pentru implementarea metodelor de interfață.

Reguli pentru înlocuirea metodei

  • Metoda trebuie să aibă același nume ca și în clasa părinte.
  • Metoda trebuie să aibă aceeași semnătură ca în clasa părinte.
  • Două clase trebuie să aibă o relație IS-A între ele.
Mai multe detalii.


79) Putem suprascrie metoda statică?

Nu, nu puteți suprascrie metoda statică, deoarece acestea sunt o parte a clasei, nu obiectul.


80) De ce nu putem trece peste metoda statică?

Se datorează faptului că metoda statică este o parte a clasei și este legată de clasă, în timp ce metoda instanței este legată de obiect, iar static primește memorie în zona clasei, iar instanța primește memorie într-un heap.


81) Putem suprascrie metoda supraîncărcată?

Da.


82) Diferența dintre metoda Overloading și Overriding.

Supraîncărcarea metodeiSuprascrierea metodei
1) Supraîncărcarea metodei crește lizibilitatea programului.Suprascrierea metodei oferă implementarea specifică a metodei care este deja furnizată de superclasa sa.
2) Supraîncărcarea metodei are loc în cadrul clasei.Suprascrierea metodei are loc în două clase care au relație IS-A între ele.
3) În acest caz, parametrii trebuie să fie diferiți.În acest caz, parametrii trebuie să fie aceiași.

83) Putem trece peste metodele private?

Nu, nu putem suprascrie metodele private deoarece domeniul de aplicare al metodelor private este limitat la clasă și nu le putem accesa în afara clasei.


84) Putem schimba domeniul de aplicare al metodei suprascrise în subclasă?

Da, putem schimba domeniul de aplicare al metodei suprascrise în subclasă. Totuși, trebuie să observăm că nu putem reduce accesibilitatea metodei. Următorul punct trebuie avut grijă în timp ce se schimbă accesibilitatea metodei.

  • Privat poate fi schimbat în protejat, public sau implicit.
  • Protejat poate fi schimbat în public sau implicit.
  • Valoarea implicită poate fi schimbată în public.
  • Publicul va rămâne întotdeauna public.

85) Putem modifica clauza throws a metodei superclasei în timp ce o suprascriem în subclasă?

Da, putem modifica clauza throws a metodei superclasei în timp ce o suprascriem în subclasă. Cu toate acestea, există unele reguli care trebuie urmate în timp ce se anulează în cazul gestionării excepțiilor.

  • Dacă metoda superclasei nu declară o excepție, metoda suprascrisă subclasă nu poate declara excepția verificată, dar poate declara excepția neverificată.
  • Dacă metoda superclasă declară o excepție, metoda suprascrisă subclasă poate declara aceeași excepție, excepție subclasă sau nicio excepție, dar nu poate declara excepția părinte.

86) Care este rezultatul următorului program Java?

 class Base { void method(int a) { System.out.println('Base class method called with integer a = '+a); } void method(double d) { System.out.println('Base class method called with double d ='+d); } } class Derived extends Base { @Override void method(double d) { System.out.println('Derived class method called with double d ='+d); } } public class Main { public static void main(String[] args) { new Derived().method(10); } } 

Ieșire

 Base class method called with integer a = 10 

Explicaţie

Metoda() este supraîncărcată în clasa Base, în timp ce este derivată în clasa Derived cu tipul dublu ca parametru. În apelul de metodă, numărul întreg este transmis.

87) Puteți avea funcții virtuale în Java?

Da, toate funcțiile din Java sunt virtuale implicit.


88) Ce este tipul de returnare covariant?

Acum, de la java5, este posibil să se suprascrie orice metodă prin schimbarea tipului de returnare dacă tipul de returnare al metodei de suprascrire a subclasei este tipul de subclasă. Este cunoscut ca tip de returnare covariant. Tipul de returnare covariant specifică faptul că tipul de returnare poate varia în aceeași direcție cu subclasa.

 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(); } } 
Testează-l acum
 Output: welcome to covariant return type 
Mai multe detalii.

89) Care este rezultatul următorului program Java?

 class Base { public void baseMethod() { System.out.println('BaseMethod called ...'); } } class Derived extends Base { public void baseMethod() { System.out.println('Derived method called ...'); } } public class Test { public static void main (String args[]) { Base b = new Derived(); b.baseMethod(); } } 

Ieșire

 Derived method called ... 

Explicaţie

Metoda clasei de bază, adică baseMethod() este suprascrisă în clasa Derived. În clasa Test, variabila de referință b (de tip Clasă de bază) se referă la instanța clasei Derivate. Aici, polimorfismul Runtime este realizat între clasa Base și Derived. În momentul compilării, prezența metodei baseMethod verificată în clasa de bază, dacă este prezență, programul compilat altfel va fi afișată eroarea compilatorului. În acest caz, baseMethod este prezentă în clasa de bază; prin urmare, este compilat cu succes. Cu toate acestea, în timpul execuției, verifică dacă metoda de bază a fost suprascrisă de către clasa Derived, dacă da, atunci metoda clasei derivate este apelată, altfel este apelată metoda clasei de bază. În acest caz, clasa Derived suprascrie metoda de bază; prin urmare, se apelează la metoda clasei derivate.


Core Java - Concepte OOP: cuvânt cheie final Întrebări interviu


90) Care este variabila finală?

În Java, variabila finală este folosită pentru a restricționa utilizatorul să o actualizeze. Dacă inițializam variabila finală, nu îi putem schimba valoarea. Cu alte cuvinte, putem spune că variabila finală, odată atribuită unei valori, nu mai poate fi schimbată după aceea. Variabila finală care nu este atribuită nici unei valori poate fi atribuită doar prin constructorul clasei.

cuvânt cheie final în java
 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 
Testează-l acum
 Output:Compile Time Error 
Mai multe detalii.

91) Care este metoda finală?

Dacă schimbăm orice metodă cu o metodă finală, nu o putem suprascrie. Mai multe detalii.

 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(); } } 
Testează-l acum
 Output:Compile Time Error 

92) Care este clasa finală?

Dacă facem o clasă finală, nu o putem moșteni în niciuna dintre subclase.

 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(); } } 
Testează-l acum
 Output:Compile Time Error 
Mai multe detalii.

93) Care este variabila goală finală?

O variabilă finală, neinițializată în momentul declarării, este cunoscută ca variabilă finală goală. Nu putem inițializa direct variabila finală goală. În schimb, trebuie să-l inițializam folosind constructorul de clasă. Este util în cazul în care utilizatorul are unele date care nu trebuie modificate de alții, de exemplu, PAN Number. Luați în considerare următorul exemplu:

 class Student{ int id; String name; final String PAN_CARD_NUMBER; ... } 
Mai multe detalii.

94) Putem inițializa variabila finală goală?

Da, dacă nu este static, îl putem inițializa în constructor. Dacă este o variabilă finală static blank, poate fi inițializată doar în blocul static. Mai multe detalii.


95) Puteți declara metoda principală ca finală?

Da, putem declara metoda principală ca public static final void main(String[] args){}.


96) Care este rezultatul următorului program Java?

 class Main { public static void main(String args[]){ final int i; i = 20; System.out.println(i); } } 

Ieșire

 20 

Explicaţie

Deoarece i este variabila finală goală. Poate fi inițializat o singură dată. L-am inițializat la 20. Prin urmare, 20 vor fi tipărite.


97) Care este rezultatul următorului program Java?

 class Base { protected final void getInfo() { System.out.println('method of Base class'); } } public class Derived extends Base { protected final void getInfo() { System.out.println('method of Derived class'); } public static void main(String[] args) { Base obj = new Base(); obj.getInfo(); } } 

Ieșire

 Derived.java:11: error: getInfo() in Derived cannot override getInfo() in Base protected final void getInfo() ^ overridden method is final 1 error 

Explicaţie

Metoda getDetails() este finală; prin urmare, nu poate fi suprascris în subclasă.


98) Putem declara un constructor ca final?

Constructorul nu poate fi niciodată declarat ca final deoarece nu este niciodată moștenit. Constructorii nu sunt metode obișnuite; prin urmare, nu are sens să declari constructori ca finali. Cu toate acestea, dacă încercați să faceți acest lucru, compilatorul va arunca o eroare.


99) Putem declara o interfață ca finală?

Nu, nu putem declara o interfață ca finală deoarece interfața trebuie implementată de o clasă pentru a oferi definiția acesteia. Prin urmare, nu are sens să facem o interfață finală. Cu toate acestea, dacă încercați să faceți acest lucru, compilatorul va afișa o eroare.


100) Care este diferența dintre metoda finală și metoda abstractă?

Principala diferență dintre metoda finală și metoda abstractă este că metoda abstractă nu poate fi finală, deoarece trebuie să le înlocuim în subclasă pentru a-i da definiția.