logo

300 domande di intervista Core Java | Insieme 1

Garanzia del 90% delle domande dell'intervista

C'è l'elenco delle 300 domande principali dell'intervista Java. Se ti è stata posta una domanda fondamentale per l'intervista su Java, pubblicala nella sezione fai domande. Ti assicuriamo che riceverai qui il 90% delle domande e delle risposte più frequenti sull'intervista.

Le risposte alle domande dell'intervista Core Java sono brevi e pertinenti. Le principali domande dell'intervista Java sono classificate in domande dell'intervista Nozioni di base su Java, domande dell'intervista OOP, domande dell'intervista sulla gestione delle stringhe, domande dell'intervista multithreading, domande dell'intervista sulla raccolta, domande dell'intervista JDBC, ecc.


1 2 3 4 5

Core Java: nozioni di base sulle domande di intervista su Java


1) Cos'è Java?

Giava è il livello alto, orientato agli oggetti , linguaggio di programmazione robusto e sicuro, indipendente dalla piattaforma, ad alte prestazioni, multithread e portatile. È stato sviluppato da James Gosling nel giugno 1991. Può anche essere conosciuta come la piattaforma poiché fornisce il proprio JRE e API.


2) Quali sono le differenze tra C++ e Java?

Le differenze tra C++ e Java sono riportati nella tabella seguente.

Indice di confronto C++Giava
Piattaforma indipendente Il C++ dipende dalla piattaforma.Java è indipendente dalla piattaforma.
Utilizzato principalmente per Il C++ viene utilizzato principalmente per la programmazione di sistema.Java viene utilizzato principalmente per la programmazione di applicazioni. È ampiamente utilizzato nelle applicazioni Windows, basate sul Web, aziendali e mobili.
Obiettivo di progettazione C++ è stato progettato per la programmazione di sistemi e applicazioni. Era un'estensione di Linguaggio di programmazione C .Java è stato progettato e creato come interprete per i sistemi di stampa ma in seguito è stato esteso come supporto informatico di rete. È stato progettato con l'obiettivo di essere facile da usare e accessibile a un pubblico più ampio.
Vai a C++ supporta l'istruzione goto.Java non supporta l'istruzione goto.
Eredità multipla Il C++ supporta l'ereditarietà multipla.Java non supporta l'ereditarietà multipla tramite classe. Può essere raggiunto da interfacce in Java .
Sovraccarico degli operatori Supporta C++ sovraccarico dell'operatore .Java non supporta l'overload degli operatori.
Puntatori C++ supporta i puntatori. Puoi scrivere un programma puntatore in C++.Java supporta il puntatore internamente. Tuttavia, non puoi scrivere il programma puntatore in Java. Significa che Java ha un supporto limitato per i puntatori in Java.
Compilatore e interprete C++ utilizza solo il compilatore. C++ viene compilato ed eseguito utilizzando il compilatore che converte il codice sorgente in codice macchina, quindi C++ dipende dalla piattaforma.Java utilizza sia il compilatore che l'interprete. Il codice sorgente Java viene convertito in bytecode al momento della compilazione. L'interprete esegue questo bytecode in fase di esecuzione e produce output. Java viene interpretato ed è per questo che è indipendente dalla piattaforma.
Chiama per valore e Chiama per riferimento C++ supporta sia la chiamata per valore che la chiamata per riferimento.Java supporta solo la chiamata in base al valore. Non esiste una chiamata per riferimento in Java.
Struttura e Unione Il C++ supporta strutture e unioni.Java non supporta strutture e unioni.
Supporto del filo C++ non ha il supporto integrato per i thread. Si basa su librerie di terze parti per il supporto dei thread.Java è integrato filo supporto.
Commento sulla documentazione C++ non supporta i commenti sulla documentazione.Java supporta il commento sulla documentazione (/** ... */) per creare la documentazione per il codice sorgente Java.
Parola chiave virtuale C++ supporta le parole chiave virtuali in modo che possiamo decidere se sovrascrivere o meno una funzione.Java non ha parole chiave virtuali. Possiamo sovrascrivere tutti i metodi non statici per impostazione predefinita. In altre parole, i metodi non statici sono virtuali per impostazione predefinita.
spostamento a destra senza segno >>> C++ non supporta l'operatore >>>.Java supporta l'operatore di spostamento a destra >>> senza segno che riempie lo zero in alto per i numeri negativi. Per i numeri positivi, funziona come l'operatore >>.
Albero dell'eredità C++ crea sempre un nuovo albero di ereditarietà.Java utilizza sempre un singolo albero di ereditarietà perché tutte le classi sono figlie della classe Object in Java. La classe oggetto è la radice del file eredità albero in Java.
Hardware Il C++ è più vicino all'hardware.Java non è così interattivo con l'hardware.
Orientato agli oggetti C++ è un linguaggio orientato agli oggetti. Tuttavia, nel linguaggio C, la gerarchia a radice singola non è possibile.Anche Java è un file orientato agli oggetti lingua. Tuttavia, in Java tutto (tranne i tipi fondamentali) è un oggetto. È una gerarchia a radice singola poiché tutto deriva da java.lang.Object.

3) Elencare le caratteristiche del linguaggio di programmazione Java.

Ci sono le seguenti funzionalità nel linguaggio di programmazione Java.

    Semplice:Java è facile da imparare. La sintassi di Java è basata su C++ che rende più semplice scrivere il programma al suo interno.
    Orientato agli oggetti:Java segue il paradigma orientato agli oggetti che ci consente di mantenere il nostro codice come la combinazione di diversi tipi di oggetti che incorporano sia dati che comportamento.
    Portatile:Java supporta l'approccio read-once-write-anywhere. Possiamo eseguire il programma Java su ogni macchina. Il programma Java (.java) viene convertito in bytecode (.class) che può essere facilmente eseguito su ogni macchina.
    Piattaforma indipendente:Java è un linguaggio di programmazione indipendente dalla piattaforma. È diverso da altri linguaggi di programmazione come C e C++ che necessitano di una piattaforma per essere eseguiti. Java viene fornito con la sua piattaforma su cui viene eseguito il suo codice. Java non dipende dal sistema operativo da eseguire.
    Garantito:Java è protetto perché non utilizza puntatori espliciti. Java fornisce anche il concetto di gestione ByteCode ed eccezioni che lo rende più sicuro.
    Robusto:Java è un linguaggio di programmazione forte poiché utilizza una forte gestione della memoria. Concetti come Garbage Collection automatica, Gestione delle eccezioni, ecc. lo rendono più robusto.
    Architettura neutrale:Java è neutrale dal punto di vista architettonico in quanto non dipende dall'architettura. In C, la dimensione dei tipi di dati può variare a seconda dell'architettura (32 bit o 64 bit) che non esiste in Java.
    Interpretato:Java utilizza l'interprete Just-in-time (JIT) insieme al compilatore per l'esecuzione del programma.
    Alte prestazioni:Java è più veloce di altri linguaggi di programmazione interpretati tradizionali perché il bytecode Java è 'vicino' al codice nativo. È ancora un po' più lento di un linguaggio compilato (ad esempio C++).
    Multithread:Possiamo scrivere programmi Java che si occupano di più attività contemporaneamente definendo più thread. Il vantaggio principale del multithreading è che non occupa memoria per ciascun thread. Condivide un'area di memoria comune. I thread sono importanti per contenuti multimediali, applicazioni Web, ecc.
    Distribuito:Java è distribuito perché facilita agli utenti la creazione di applicazioni distribuite in Java. RMI ed EJB vengono utilizzati per creare applicazioni distribuite. Questa funzionalità di Java ci consente di accedere ai file richiamando i metodi da qualsiasi macchina su Internet.
    Dinamico:Java è un linguaggio dinamico. Supporta il caricamento dinamico delle classi. Significa che le lezioni vengono caricate su richiesta. Supporta anche funzioni dei suoi linguaggi nativi, ovvero C e C++.

4) Cosa intendi per Java virtual machine?

macchina virtuale Java è una macchina virtuale che consente al computer di eseguire il programma Java. JVM si comporta come un motore runtime che richiama il metodo principale presente nel codice Java. JVM è la specifica che deve essere implementata nel sistema informatico. Il codice Java è compilato da JVM come Bytecode indipendente dalla macchina e vicino al codice nativo.


5) Qual è la differenza tra JDK, JRE e JVM?

JVM

JVM è l'acronimo di Java Virtual Machine; è una macchina astratta che fornisce l'ambiente runtime in cui è possibile eseguire il bytecode Java. È una specifica che specifica il funzionamento di Java Virtual Machine. La sua implementazione è stata fornita da Oracle e altre società. La sua implementazione è nota come JRE.

Le JVM sono disponibili per molte piattaforme hardware e software (quindi la JVM dipende dalla piattaforma). È un'istanza runtime che viene creata quando eseguiamo la classe Java. Esistono tre nozioni di JVM: specifica, implementazione e istanza.

JRE

JRE sta per Java Runtime Environment. È l'implementazione di JVM. Java Runtime Environment è un insieme di strumenti software utilizzati per lo sviluppo di applicazioni Java. Viene utilizzato per fornire l'ambiente di runtime. È l'implementazione di JVM. Esiste fisicamente. Contiene un set di librerie + altri file che JVM utilizza in fase di runtime.

JDK

JDK è l'acronimo di Java Development Kit. È un ambiente di sviluppo software utilizzato per sviluppare applicazioni e applet Java. Esiste fisicamente. Contiene JRE + strumenti di sviluppo. JDK è un'implementazione di una qualsiasi delle seguenti piattaforme Java rilasciate da Oracle Corporation:

  • Piattaforma Java edizione standard
  • Piattaforma Java edizione aziendale
  • Piattaforma Java Micro Edizione
Più dettagli.

6) Quanti tipi di aree di memoria sono allocati da JVM?

Molti tipi:

    Area Classe (Metodo):L'area della classe memorizza strutture per classe come il pool di costanti di runtime, il campo, i dati del metodo e il codice per i metodi.Mucchio:È l'area dei dati runtime in cui viene allocata la memoria agli oggettiPila:Java Stack memorizza i frame. Contiene variabili locali e risultati parziali e svolge un ruolo nell'invocazione e nella restituzione del metodo. Ogni thread ha uno stack JVM privato, creato contemporaneamente al thread. Viene creato un nuovo frame ogni volta che viene invocato un metodo. Un frame viene distrutto quando viene completata l'invocazione del metodo.Registro del contatore del programma:Il registro PC (contatore del programma) contiene l'indirizzo dell'istruzione della Java virtual machine attualmente in esecuzione.Stack di metodi nativi:Contiene tutti i metodi nativi utilizzati nell'applicazione.
Più dettagli.

7) Cos'è il compilatore JIT?

Compilatore Just-In-Time (JIT): Viene utilizzato per migliorare le prestazioni. JIT compila contemporaneamente parti del bytecode che hanno funzionalità simili e quindi riduce la quantità di tempo necessaria per la compilazione. Qui il termine compilatore si riferisce a un traduttore dal set di istruzioni di una Java virtual machine (JVM) al set di istruzioni di una specifica CPU.


8) Cos'è la piattaforma?

Una piattaforma è l'ambiente hardware o software in cui viene eseguito un pezzo di software. Esistono due tipi di piattaforme, basate su software e basate su hardware. Java fornisce la piattaforma basata su software.


9) Quali sono le principali differenze tra la piattaforma Java e le altre piattaforme?

Esistono le seguenti differenze tra la piattaforma Java e le altre piattaforme.

  • Java è la piattaforma basata su software mentre altre piattaforme possono essere piattaforme hardware o piattaforme basate su software.
  • Java viene eseguito su altre piattaforme hardware mentre altre piattaforme possono avere solo componenti hardware.

10) Cosa dà a Java la sua natura 'scrivi una volta ed esegui ovunque'?

Il codice byte. Il compilatore Java converte i programmi Java nel file di classe (Byte Code) che è il linguaggio intermedio tra il codice sorgente e il codice macchina. Questo bytecode non è specifico della piattaforma e può essere eseguito su qualsiasi computer.


11) Cos'è il classloader?

Classloader è un sottosistema di JVM utilizzato per caricare file di classi. Ogni volta che eseguiamo il programma Java, viene caricato per primo dal classloader. Ci sono tre classloader integrati in Java.

    Caricatore di classi Bootstrap: Questo è il primo classloader che è la superclasse del classloader Extension. Carica il rt.jar file che contiene tutti i file di classe di Java Standard Edition come classi di pacchetto java.lang, classi di pacchetto java.net, classi di pacchetto java.util, classi di pacchetto java.io, classi di pacchetto java.sql, ecc.ClassLoader dell'estensione: questo è il classloader figlio di Bootstrap e il classloader genitore del classloader System. Carica i file jar che si trovano all'interno $JAVA_HOME/jre/lib/ext directory.ClassLoader sistema/applicazione: Questo è il classloader figlio del classloader Extension. Carica i file di classe dal classpath. Per impostazione predefinita, il classpath è impostato sulla directory corrente. Puoi modificare il classpath utilizzando l'opzione '-cp' o '-classpath'. È noto anche come caricatore di classi dell'applicazione.

12) Il nome del file .java vuoto è un nome di file di origine valido?

Sì, Java consente di salvare il nostro file Java tramite .Giava solo, dobbiamo compilarlo entro javac.java e gestito da nome classe Java Facciamo un semplice esempio:

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

compilarlo entro javac.java

gestiscilo giava A


13) La parola chiave delete, next, main, exit o null è in Java?

NO.


14) Se non fornisco alcun argomento sulla riga di comando, quale sarà il valore memorizzato nell'array String passato al metodo main(), vuoto o NULL?

È vuoto, ma non nullo.


15) Cosa succede se scrivo static public void invece di public static void?

Il programma viene compilato e eseguito correttamente poiché l'ordine degli specificatori non ha importanza in Java.


16) Qual è il valore di default delle variabili locali?

Le variabili locali non sono inizializzate su alcun valore predefinito, né primitive né riferimenti a oggetti.


17) Quali sono i vari specificatori di accesso in Java?

In Java, gli specificatori di accesso sono le parole chiave utilizzate per definire l'ambito di accesso del metodo, della classe o di una variabile. In Java, ci sono quattro specificatori di accesso indicati di seguito.

    PubblicoLe classi, i metodi o le variabili definiti come pubblici sono accessibili da qualsiasi classe o metodo.ProtettoÈ possibile accedere a Protected dalla classe dello stesso pacchetto, o dalla sottoclasse di questa classe, o all'interno della stessa classe.PredefinitoLe impostazioni predefinite sono accessibili solo all'interno del pacchetto. Per impostazione predefinita, tutte le classi, i metodi e le variabili hanno un ambito predefinito.PrivatoÈ possibile accedere alla classe privata, ai metodi o alle variabili definite come private solo all'interno della classe.

18) Qual è lo scopo dei metodi e delle variabili statiche?

I metodi o le variabili definiti come statici sono condivisi tra tutti gli oggetti della classe. Lo statico è la parte della classe e non dell'oggetto. Le variabili statiche sono memorizzate nell'area della classe e non è necessario creare l'oggetto per accedere a tali variabili. Pertanto, lo static viene utilizzato nel caso in cui dobbiamo definire variabili o metodi comuni a tutti gli oggetti della classe.

Ad esempio, nella classe che simula la raccolta degli studenti in un college, il nome del college è l'attributo comune a tutti gli studenti. Pertanto, il nome del college sarà definito come statico .


19) Quali sono i vantaggi dei pacchetti in Java?

Ci sono vari vantaggi nel definire i pacchetti in Java.

  • I pacchetti evitano conflitti di nomi.
  • Il pacchetto fornisce un controllo degli accessi più semplice.
  • Possiamo anche avere le classi nascoste che non sono visibili all'esterno e utilizzate dal pacchetto.
  • È più semplice individuare le classi correlate.

20) Qual è l'output del seguente programma Java?

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

L'output del codice sopra sarà

 30Javatpoint Javatpoint1020 

Spiegazione

Nel primo caso, 10 e 20 vengono trattati come numeri e sommati per ottenere 30. Ora, la loro somma 30 viene trattata come stringa e concatenata con la stringa Javatpoint . Pertanto, l'output sarà 30Javatpoint .

Nel secondo caso, la stringa Javatpoint viene concatenata con 10 come stringa Javatpoint10 che verrà poi concatenato con 20 to be Javatpoint1020 .


21) Qual è l'output del seguente programma Java?

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

L'output del codice sopra sarà

 200Javatpoint Javatpoint200 

Spiegazione

Nel primo caso, i numeri 10 e 20 verranno prima moltiplicati e poi il risultato 200 verrà trattato come stringa e concatenato con la stringa Javatpoint per produrre l'output 200Javatpoint .

Nel secondo caso, i numeri 10 e 20 verranno moltiplicati prima per ottenere 200 perché la precedenza della moltiplicazione è maggiore dell'addizione. Il risultato 200 verrà trattato come stringa e concatenato con la stringa Javatpoint per produrre l'output come Javatpoint200 .


22) Qual è l'output del seguente programma Java?

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

Il codice precedente genererà un errore in fase di compilazione perché il ciclo for richiede un valore booleano nella seconda parte e stiamo fornendo un valore intero, ovvero 0.


Core Java - Concetti OOP: domande iniziali del colloquio OOP

Vengono fornite più di 50 domande di intervista OOP (programmazione e sistema orientati agli oggetti). Tuttavia, sono stati classificati in molte sezioni come domande di intervista al costruttore, domande di intervista statica, domande di intervista sull'ereditarietà, domande di intervista sull'astrazione, domande di intervista sul polimorfismo, ecc. Per una migliore comprensione.


23) Cos'è il paradigma orientato agli oggetti?

È un paradigma di programmazione basato su oggetti aventi dati e metodi definiti nella classe a cui appartiene. Il paradigma orientato agli oggetti mira a incorporare i vantaggi della modularità e della riusabilità. Gli oggetti sono le istanze di classi che interagiscono tra loro per progettare applicazioni e programmi. Ci sono le seguenti caratteristiche del paradigma orientato agli oggetti.

  • Segue l'approccio dal basso verso l'alto nella progettazione del programma.
  • Concentrarsi sui dati con metodi per operare sui dati dell'oggetto
  • Include concetti come incapsulamento e astrazione che nascondono le complessità all'utente e mostrano solo funzionalità.
  • Implementa l'approccio in tempo reale come ereditarietà, astrazione, ecc.
  • Gli esempi del paradigma orientato agli oggetti sono C++, Simula, Smalltalk, Python, C#, ecc.

24) Cos'è un oggetto?

L'oggetto è l'entità in tempo reale che ha uno stato e un comportamento. In Java, Object è un'istanza della classe avente le variabili di istanza come stato dell'oggetto e i metodi come comportamento dell'oggetto. L'oggetto di una classe può essere creato utilizzando il metodo nuovo parola chiave.


25) Qual è la differenza tra un linguaggio di programmazione orientato agli oggetti e un linguaggio di programmazione basato sugli oggetti?

Esistono le seguenti differenze fondamentali tra il linguaggio orientato agli oggetti e il linguaggio basato sugli oggetti.

  • I linguaggi orientati agli oggetti seguono tutti i concetti degli OOP mentre il linguaggio basato sugli oggetti non segue tutti i concetti degli OOP come ereditarietà e polimorfismo.
  • I linguaggi orientati agli oggetti non hanno oggetti incorporati mentre i linguaggi basati su oggetti hanno oggetti incorporati, ad esempio JavaScript ha un oggetto finestra.
  • Esempi di programmazione orientata agli oggetti sono Java, C#, Smalltalk, ecc. Mentre gli esempi di linguaggi basati sugli oggetti sono JavaScript, VBScript, ecc.

26) Quale sarà il valore iniziale di un riferimento a un oggetto definito come variabile di istanza?

Tutti i riferimenti agli oggetti vengono inizializzati su null in Java.


Core Java - Concetti OOP: domande di intervista al costruttore


27) Cos'è il costruttore?

Il costruttore può essere definito come il tipo speciale di metodo utilizzato per inizializzare lo stato di un oggetto. Viene richiamato quando viene creata un'istanza della classe e la memoria viene allocata per l'oggetto. Ogni volta, viene creato un oggetto utilizzando il file nuovo parola chiave, viene chiamato il costruttore predefinito della classe. Il nome del costruttore deve essere simile al nome della classe. Il costruttore non deve avere un tipo restituito esplicito.

Più dettagli.

28) Quanti tipi di costruttori sono utilizzati in Java?

In base ai parametri passati nei costruttori, esistono due tipi di costruttori in Java.

    Costruttore predefinito:il costruttore predefinito è quello che non accetta alcun valore. Il costruttore predefinito viene utilizzato principalmente per inizializzare la variabile di istanza con i valori predefiniti. Può anche essere utilizzato per eseguire alcune attività utili sulla creazione di oggetti. Un costruttore predefinito viene richiamato implicitamente dal compilatore se nella classe non è definito alcun costruttore.Costruttore parametrizzato:Il costruttore con parametri è quello che può inizializzare le variabili di istanza con i valori specificati. In altre parole, possiamo dire che i costruttori che possono accettare gli argomenti sono detti costruttori parametrizzati.
Costruttori Java

29) Qual è lo scopo di un costruttore predefinito?

Lo scopo del costruttore predefinito è assegnare il valore predefinito agli oggetti. Il compilatore Java crea implicitamente un costruttore predefinito se non è presente alcun costruttore nella classe.

 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(); } } 
Provalo adesso

Produzione:

 0 null 0 null 

Spiegazione: Nella classe precedente, non stai creando alcun costruttore, quindi il compilatore ti fornisce un costruttore predefinito. Qui i valori 0 e null sono forniti dal costruttore predefinito.

Costruttore predefinito Java
Più dettagli.

30) Il costruttore restituisce qualche valore?

Anni: sì, il costruttore restituisce implicitamente l'istanza corrente della classe (non è possibile utilizzare un tipo restituito esplicito con il costruttore). Più dettagli.


31) Il costruttore è ereditato?

No, il costruttore non è ereditato.


32) Puoi fare un costruttore finale?

No, il costruttore non può essere definitivo.

coda e coda prioritaria in Java

33) Possiamo sovraccaricare i costruttori?

Sì, i costruttori possono essere sovraccaricati modificando il numero di argomenti accettati dal costruttore o modificando il tipo di dati dei parametri. Considera il seguente esempio.

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

Nel programma precedente, il costruttore Test è sovraccaricato con un altro costruttore. Nella prima chiamata al costruttore, viene chiamato il costruttore con un argomento e i verrà inizializzato con il valore 10. Tuttavia, nella seconda chiamata al costruttore, viene chiamato il costruttore con 2 argomenti e i verrà inizializzato con il valore 15.


34) Cosa intendi per costruttore di copie in Java?

Non esiste un costruttore di copie in Java. Tuttavia, possiamo copiare i valori da un oggetto a un altro come il costruttore di copie in C++.

Esistono molti modi per copiare i valori di un oggetto in un altro in Java. Sono:

  • Per costruttore
  • Assegnando i valori di un oggetto a un altro
  • Con il metodo clone() della classe Object

In questo esempio, copieremo i valori di un oggetto in un altro utilizzando il costruttore 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(); } } 
Provalo adesso

Produzione:

 111 Karan 111 Karan 

35) Quali sono le differenze tra costruttori e metodi?

Esistono molte differenze tra costruttori e metodi. Sono riportati di seguito.

Costruttore JavaMetodo Java
Un costruttore viene utilizzato per inizializzare lo stato di un oggetto.Un metodo viene utilizzato per esporre il comportamento di un oggetto.
Un costruttore non deve avere un tipo restituito.Un metodo deve avere un tipo restituito.
Il costruttore viene invocato implicitamente.Il metodo viene invocato esplicitamente.
Il compilatore Java fornisce un costruttore predefinito se non è presente alcun costruttore in una classe.Il metodo non viene comunque fornito dal compilatore.
Il nome del costruttore deve essere uguale al nome della classe.Il nome del metodo può essere uguale o meno al nome della classe.

Costruttori Java e metodi

36) Qual è l'output del seguente programma 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); } } 

L'output del seguente programma è:

 a = 10 b = 15 

Qui il tipo di dati delle variabili a e b, cioè byte, viene promosso a int e viene chiamato il primo costruttore parametrizzato con i due parametri interi.


37) Qual è l'output del seguente programma Java?

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

L'output del programma è 0 perché la variabile i è inizializzata su 0 internamente. Poiché sappiamo che un costruttore predefinito viene invocato implicitamente se non è presente alcun costruttore nella classe, la variabile i viene inizializzata a 0 poiché non è presente alcun costruttore nella classe.


38) Qual è l'output del seguente programma 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); } } 

C'è un errore del compilatore nel programma perché nel metodo main è presente una chiamata al costruttore predefinito che non è presente nella classe. Tuttavia, esiste un solo costruttore con parametri nella classe Test. Pertanto, nessun costruttore predefinito viene richiamato implicitamente dal costruttore.


Core Java - Concetti OOP: domande di intervista con parole chiave statiche


39) Cos'è la variabile statica?

La variabile statica viene utilizzata per fare riferimento alla proprietà comune di tutti gli oggetti (che non è univoca per ciascun oggetto), ad esempio il nome dell'azienda dei dipendenti, il nome dell'università degli studenti, ecc. La variabile statica ottiene memoria solo una volta nell'area della classe a l'orario di caricamento della lezione. L'uso di una variabile statica rende il programma più efficiente in termini di memoria (fa risparmiare memoria). La variabile statica appartiene alla classe anziché all'oggetto.

 //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(); } } 
Provalo adesso
 Output:111 Karan ITS 222 Aryan ITS 

Più dettagli.

40) Cos'è il metodo statico?

  • Un metodo statico appartiene alla classe anziché all'oggetto.
  • Non è necessario creare l'oggetto per chiamare i metodi statici.
  • Un metodo statico può accedere e modificare il valore della variabile statica.
Più dettagli.

41) Quali sono le restrizioni applicate ai metodi statici Java?

Ai metodi statici vengono applicate due restrizioni principali.

  • Il metodo statico non può utilizzare un membro dati non statico o chiamare direttamente il metodo non statico.
  • this e super non possono essere utilizzati in un contesto statico poiché non sono statici.

42) Perchè il metodo main è statico?

Perché non è necessario che l'oggetto chiami il metodo statico. Se rendiamo il metodo main non statico, JVM dovrà prima creare il suo oggetto e poi chiamare il metodo main() che porterà all'allocazione di memoria aggiuntiva. Più dettagli.


43) Possiamo sovrascrivere i metodi statici?

No, non possiamo sovrascrivere i metodi statici.

44) Cos'è il blocco statico?

Il blocco statico viene utilizzato per inizializzare il membro dati statico. Viene eseguito prima del metodo main, al momento del caricamento della classe.

 class A2{ static{System.out.println('static block is invoked');} public static void main(String args[]){ System.out.println('Hello main'); } } 
Provalo adesso
 Output: static block is invoked Hello main 

Più dettagli.

45) Possiamo eseguire un programma senza il metodo main()?

Risposta) No, prima del JDK 1.7 era possibile utilizzare il blocco statico. A partire da JDK 1.7, non è possibile. Più dettagli.


46) Cosa succede se il modificatore statico viene rimosso dalla firma del metodo principale?

Il programma viene compilato. Tuttavia, in fase di esecuzione, viene generato l'errore 'NoSuchMethodError'.


47) Qual è la differenza tra metodo statico (di classe) e metodo di istanza?

metodo statico o di classemetodo di istanza
1)Un metodo dichiarato come statico è noto come metodo statico.Un metodo che non è dichiarato statico è noto come metodo di istanza.
2)Non è necessario creare gli oggetti per chiamare i metodi statici.L'oggetto è necessario per chiamare i metodi di istanza.
3) Non è possibile accedere direttamente ai membri non statici (istanza) nel contesto statico (metodo statico, blocco statico e classe nidificata statica).È possibile accedere alle variabili statiche e non statiche nei metodi di istanza.
4)Ad esempio: public static int cube(int n){ return n*n*n;}Ad esempio: public void msg(){...}.

48) Possiamo rendere statici i costruttori?

Come sappiamo, il contesto statico (metodo, blocco o variabile) appartiene alla classe, non all'oggetto. Poiché i costruttori vengono invocati solo quando viene creato l'oggetto, non ha senso rendere statici i costruttori. Tuttavia, se si tenta di farlo, il compilatore mostrerà l'errore del compilatore.


49) Possiamo rendere statici i metodi astratti in Java?

In Java, se rendiamo statici i metodi astratti, diventeranno parte della classe e potremo chiamarli direttamente, il che non è necessario. Chiamare un metodo non definito è completamente inutile quindi non è consentito.


50) Possiamo dichiarare variabili e metodi statici in una classe astratta?

Sì, possiamo dichiarare variabili e metodi statici in un metodo astratto. Poiché sappiamo che non è necessario che l'oggetto acceda al contesto statico, quindi, possiamo accedere al contesto statico dichiarato all'interno della classe astratta utilizzando il nome della classe astratta. Considera il seguente esempio.

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

Produzione

 hi !! I am good !! i = 102 

Core Java - Concetti OOP: domande di colloquio sull'ereditarietà


51) Cos'è Questo parola chiave in Java?

IL Questo parola chiave è una variabile di riferimento che fa riferimento all'oggetto corrente. Esistono vari usi di questa parola chiave in Java. Può essere utilizzato per fare riferimento alle proprietà correnti della classe come metodi di istanza, variabili, costruttori, ecc. Può anche essere passato come argomento nei metodi o nei costruttori. Può anche essere restituito dal metodo come istanza della classe corrente.

Java questa parola chiave
Più dettagli.

52) Quali sono gli usi principali di questa parola chiave?

Ci sono i seguenti usi di Questo parola chiave.

    Questopuò essere usato per fare riferimento alla variabile di istanza della classe corrente.Questopuò essere usato per invocare il metodo della classe corrente (implicitamente)Questo()può essere usato per invocare il costruttore della classe corrente.Questopuò essere passato come argomento nella chiamata al metodo.Questopuò essere passato come argomento nella chiamata del costruttore.Questopuò essere utilizzato per restituire l'istanza della classe corrente dal metodo.

53) Possiamo attribuire il riferimento a Questo variabile?

No, non può essere assegnato ad alcun valore perché punta sempre all'oggetto classe corrente e questo è il riferimento finale in Java. Tuttavia, se proviamo a farlo, verrà mostrato l'errore del compilatore. Considera il seguente esempio.

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

Produzione

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

54) Can Questo la parola chiave può essere utilizzata per fare riferimento a membri statici?

Sì, è possibile utilizzare questa parola chiave per fare riferimento a membri statici perché si tratta solo di una variabile di riferimento che fa riferimento all'oggetto della classe corrente. Tuttavia, come sappiamo, non è necessario accedere alle variabili statiche tramite oggetti, pertanto non è consigliabile utilizzarlo per fare riferimento a membri statici. Considera il seguente esempio.

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

Produzione

 10 

55) Come è possibile eseguire il concatenamento del costruttore utilizzando questa parola chiave?

Il concatenamento dei costruttori ci consente di chiamare un costruttore da un altro costruttore della classe rispetto all'oggetto classe corrente. Possiamo usare questa parola chiave per eseguire il concatenamento di costruttori all'interno della stessa classe. Considera l'esempio seguente che illustra come possiamo utilizzare questa parola chiave per ottenere il concatenamento dei costruttori.

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

Produzione

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

56) Quali sono i vantaggi di passarlo in un metodo anziché nell'oggetto classe corrente stesso?

Come sappiamo, questo si riferisce all'oggetto della classe corrente, quindi deve essere simile all'oggetto della classe corrente. Tuttavia, ci possono essere due vantaggi principali nel passarlo in un metodo invece che nell'oggetto classe corrente.

  • questa è una variabile finale. Pertanto, questo non può essere assegnato a nessun nuovo valore mentre l'oggetto della classe corrente potrebbe non essere definitivo e può essere modificato.
  • questo può essere utilizzato nel blocco sincronizzato.

57) Cos'è l'eredità?

L'ereditarietà è un meccanismo mediante il quale un oggetto acquisisce tutte le proprietà e il comportamento di un altro oggetto di un'altra classe. Viene utilizzato per la riusabilità del codice e l'override del metodo. L'idea alla base dell'ereditarietà in Java è che è possibile creare nuove classi basate su classi esistenti. Quando erediti da una classe esistente, puoi riutilizzare metodi e campi della classe genitore. Inoltre, puoi anche aggiungere nuovi metodi e campi nella tua classe attuale. L'ereditarietà rappresenta la relazione IS-A, nota anche come relazione genitore-figlio.

Esistono cinque tipi di ereditarietà in Java.

  • Eredità a livello singolo
  • Eredità multilivello
  • Eredità multipla
  • Eredità gerarchica
  • Eredità ibrida

L'ereditarietà multipla non è supportata in Java tramite la classe.

Più dettagli.

58) Perché viene utilizzata l'ereditarietà in Java?

Esistono vari vantaggi nell'utilizzo dell'ereditarietà in Java riportati di seguito.

  • L'ereditarietà fornisce la riusabilità del codice. La classe derivata non ha bisogno di ridefinire il metodo della classe base a meno che non debba fornire l'implementazione specifica del metodo.
  • Il polimorfismo di runtime non può essere ottenuto senza utilizzare l'ereditarietà.
  • Possiamo simulare l'ereditarietà delle classi con gli oggetti in tempo reale che rendono gli OOP più realistici.
  • L'ereditarietà fornisce l'occultamento dei dati. La classe base può nascondere alcuni dati dalla classe derivata rendendola privata.
  • L'override del metodo non può essere ottenuto senza ereditarietà. Mediante l'override del metodo, possiamo fornire un'implementazione specifica di alcuni metodi di base contenuti nella classe base.

59) Quale classe è la superclasse per tutte le classi?

La classe oggetto è la superclasse di tutte le altre classi in Java.


60) Perché l'ereditarietà multipla non è supportata in Java?

Per ridurre la complessità e semplificare il linguaggio, Java non supporta l'ereditarietà multipla. Considera uno scenario in cui A, B e C sono tre classi. La classe C eredita le classi A e B. Se le classi A e B hanno lo stesso metodo e lo chiami dall'oggetto della classe figlio, ci sarà ambiguità nel chiamare il metodo della classe A o B.

Poiché gli errori in fase di compilazione sono migliori degli errori di runtime, Java restituisce un errore in fase di compilazione se si ereditano 2 classi. Pertanto, indipendentemente dal fatto che tu abbia lo stesso metodo o un metodo diverso, si verificherà un errore in fase di compilazione.

 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? } } 
Provalo adesso
 Compile Time Error 

61) Cos'è l'aggregazione?

L'aggregazione può essere definita come la relazione tra due classi in cui la classe aggregata contiene un riferimento alla classe che possiede. L'aggregazione è meglio descritta come a ha un relazione. Ad esempio, la classe aggregata Dipendente con vari campi come età, nome e stipendio contiene anche un oggetto della classe Indirizzo con vari campi come Riga indirizzo 1, Città, Stato e codice PIN. In altre parole, possiamo dire che Employee (classe) ha un oggetto della classe Address. Considera il seguente esempio.

Indirizzo.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; } } 

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

Produzione

 111 varun gzb UP india 112 arun gno UP india 

62) Cos'è la composizione?

Mantenere il riferimento di una classe all'interno di un'altra classe è noto come composizione. Quando un oggetto contiene l'altro oggetto, se l'oggetto contenuto non può esistere senza l'esistenza dell'oggetto contenitore, allora si parla di composizione. In altre parole, possiamo dire che la composizione è il caso particolare di aggregazione che rappresenta una relazione più forte tra due oggetti. Esempio: una classe contiene studenti. Uno studente non può esistere senza una classe. Esiste una composizione tra classe e studenti.


63) Qual è la differenza tra aggregazione e composizione?

L'aggregazione rappresenta la relazione debole mentre la composizione rappresenta la relazione forte. Ad esempio, la bicicletta ha un indicatore (aggregazione), ma la bicicletta ha un motore (composizione).


64) Perché Java non supporta i puntatori?

Il puntatore è una variabile che fa riferimento all'indirizzo di memoria. Non vengono utilizzati in Java perché non sono sicuri (non protetti) e complessi da comprendere.


65) Cos'è super in Java?

IL super La parola chiave in Java è una variabile di riferimento utilizzata per fare riferimento all'oggetto della classe genitore immediata. Ogni volta che crei l'istanza della sottoclasse, viene creata implicitamente un'istanza della classe genitore a cui fa riferimento la variabile super riferimento. Il super() viene chiamato implicitamente nel costruttore della classe dal compilatore se non c'è super o this.

 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(); } } 
Provalo adesso

Produzione:

 animal is created dog is created 
Più dettagli.

66) Come si può eseguire il concatenamento del costruttore utilizzando la parola chiave 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); } } 

Produzione

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

67) Quali sono gli usi principali della super parola chiave?

Esistono i seguenti usi della parola chiave super.

  • super può essere utilizzato per fare riferimento alla variabile di istanza della classe genitore immediata.
  • super può essere utilizzato per invocare il metodo della classe genitore immediata.
  • super() può essere utilizzato per invocare il costruttore immediato della classe genitore.

68) Quali sono le differenze tra questa e la super parola chiave?

Ci sono le seguenti differenze tra questa e la super parola chiave.

  • La parola chiave super punta sempre ai contesti della classe genitore mentre questa parola chiave punta sempre al contesto della classe corrente.
  • La parola chiave super viene utilizzata principalmente per inizializzare le variabili della classe base all'interno del costruttore della classe derivata, mentre questa parola chiave viene utilizzata principalmente per distinguere tra variabili locali e di istanza quando passate nel costruttore della classe.
  • Super e this devono essere la prima istruzione all'interno del costruttore altrimenti il ​​compilatore genererà un errore.

69) Qual è l'output del seguente programma 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(); } } 

Produzione

 Person class constructor called Employee class constructor called 

Spiegazione

Il super() viene richiamato implicitamente dal compilatore se nessun super() o this() è incluso esplicitamente nel costruttore della classe derivata. Pertanto, in questo caso, viene chiamato prima il costruttore della classe Person e poi il costruttore della classe Employee.


70) Puoi usare this() e super() entrambi in un costruttore?

No, perché this() e super() devono essere la prima istruzione nel costruttore della classe.

Esempio:

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

Produzione:

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

71)Cos'è la clonazione di oggetti?

La clonazione dell'oggetto viene utilizzata per creare la copia esatta di un oggetto. Il metodo clone() della classe Object viene utilizzato per clonare un oggetto. IL java.lang.Cloneable deve essere implementata dalla classe di cui vogliamo creare il clone dell'oggetto. Se non implementiamo l'interfaccia Cloneable, il metodo clone() genera CloneNotSupportedException.

 protected Object clone() throws CloneNotSupportedException 
Più dettagli.

Core Java - Concetti OOP: domande di intervista sul sovraccarico dei metodi


72) Cos'è l'overloading del metodo?

L'overload dei metodi è la tecnica del polimorfismo che ci consente di creare più metodi con lo stesso nome ma firma diversa. Possiamo ottenere l'overload del metodo in due modi.

  • Modificando il numero di argomenti
  • Modificando il tipo di dati degli argomenti

Il sovraccarico del metodo aumenta la leggibilità del programma. L'overload del metodo viene eseguito per capire rapidamente il programma.

Più dettagli.

73) Perché l'overload del metodo non è possibile modificando il tipo di ritorno in Java?

In Java, l'overload del metodo non è possibile modificando il tipo restituito del programma per evitare ambiguità.

 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 }} 
Provalo adesso

Produzione:

 Compile Time Error: method add(int, int) is already defined in class Adder 
Più dettagli.

74) Possiamo sovraccaricare i metodi rendendoli statici?

No, non possiamo sovraccaricare i metodi semplicemente applicando loro la parola chiave statica (il numero di parametri e i tipi sono gli stessi). Considera il seguente esempio.

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

Produzione

 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) Possiamo sovraccaricare il metodo main()?

Sì, possiamo avere un numero qualsiasi di metodi principali in un programma Java utilizzando l'overload dei metodi.

Più dettagli.

76) Cos'è l'overload del metodo con la promozione del tipo?

Per promozione del tipo si intende l'overload del metodo, intendiamo che un tipo di dati può essere promosso implicitamente a un altro se non viene trovata alcuna corrispondenza esatta.

Overloading del metodo Java con promozione del tipo

Come mostrato nel diagramma sopra, il byte può essere promosso a short, int, long, float o double. Il tipo di dati short può essere promosso a int, long, float o double. Il tipo di dati char può essere promosso a int, long, float o double e così via. Considera il seguente esempio.

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

Produzione

 40 60 

77) Qual è l'output del seguente programma 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 } } 

Produzione

 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 

Spiegazione

Esistono due metodi definiti con lo stesso nome, ovvero sum. Il primo metodo accetta il tipo intero e lungo mentre il secondo metodo accetta il tipo lungo e intero. I parametri passati sono a = 20, b = 20. Non possiamo dire quale metodo verrà chiamato poiché non viene menzionata una chiara differenziazione tra letterale intero e letterale lungo. Questo è il caso dell'ambiguità. Pertanto, il compilatore genererà un errore.


Core Java - Concetti OOP: domande di intervista con priorità sul metodo


78) Cos'è il metodo prioritario:

Se una sottoclasse fornisce un'implementazione specifica di un metodo già fornito dalla sua classe genitore, è nota come Method Overriding. Viene utilizzato per il polimorfismo di runtime e per implementare i metodi di interfaccia.

Regole per la sostituzione del metodo

  • Il metodo deve avere lo stesso nome della classe genitore.
  • Il metodo deve avere la stessa firma della classe genitore.
  • Due classi devono avere una relazione IS-A tra loro.
Più dettagli.


79) Possiamo sovrascrivere il metodo statico?

No, non puoi sovrascrivere il metodo statico perché fanno parte della classe, non dell'oggetto.


80) Perché non possiamo sovrascrivere il metodo statico?

È perché il metodo statico fa parte della classe ed è legato alla classe mentre il metodo di istanza è legato all'oggetto e statico ottiene memoria nell'area della classe e l'istanza ottiene memoria in un heap.


81) Possiamo sovrascrivere il metodo sovraccaricato?

SÌ.


82) Differenza tra metodo Overloading e Overriding.

Sovraccarico del metodoMetodo prioritario
1) Il sovraccarico del metodo aumenta la leggibilità del programma.L'override del metodo fornisce l'implementazione specifica del metodo già fornita dalla sua superclasse.
2) L'overload del metodo si verifica all'interno della classe.L'override del metodo si verifica in due classi che hanno una relazione IS-A tra di loro.
3) In questo caso i parametri devono essere diversi.In questo caso i parametri devono essere gli stessi.

83) Possiamo sovrascrivere i metodi privati?

No, non possiamo sovrascrivere i metodi privati ​​perché l'ambito dei metodi privati ​​è limitato alla classe e non possiamo accedervi al di fuori della classe.


84) Possiamo cambiare l'ambito del metodo sovrascritto nella sottoclasse?

Sì, possiamo modificare l'ambito del metodo sottoposto a override nella sottoclasse. Dobbiamo però notare che non possiamo diminuire l’accessibilità del metodo. È necessario prestare attenzione al punto seguente quando si modifica l'accessibilità del metodo.

  • Il privato può essere modificato in protetto, pubblico o predefinito.
  • Il protetto può essere modificato in pubblico o predefinito.
  • L'impostazione predefinita può essere modificata in pubblica.
  • Il pubblico resterà sempre pubblico.

85) Possiamo modificare la clausola Throws del metodo della superclasse sovrascrivendola nella sottoclasse?

Sì, possiamo modificare la clausola Throws del metodo della superclasse sovrascrivendola nella sottoclasse. Tuttavia, ci sono alcune regole che devono essere seguite durante l'override in caso di gestione delle eccezioni.

  • Se il metodo della superclasse non dichiara un'eccezione, il metodo sottoposto a override della sottoclasse non può dichiarare l'eccezione controllata, ma può dichiarare l'eccezione non controllata.
  • Se il metodo della superclasse dichiara un'eccezione, il metodo sovrascritto della sottoclasse può dichiarare la stessa eccezione della sottoclasse o nessuna eccezione ma non può dichiarare l'eccezione del genitore.

86) Qual è l'output del seguente programma 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); } } 

Produzione

 Base class method called with integer a = 10 

Spiegazione

Il metodo() è sovraccaricato nella classe Base mentre è derivato nella classe Derived con il tipo double come parametro. Nella chiamata al metodo viene passato il numero intero.

87) Si possono avere funzioni virtuali in Java?

Sì, tutte le funzioni in Java sono virtuali per impostazione predefinita.


88) Cos'è il tipo di rendimento covariante?

Ora, a partire da Java5, è possibile sovrascrivere qualsiasi metodo modificando il tipo restituito se il tipo restituito del metodo che sovrascrive la sottoclasse è il tipo sottoclasse. È noto come tipo di rendimento covariante. Il tipo restituito covariante specifica che il tipo restituito può variare nella stessa direzione della sottoclasse.

 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(); } } 
Provalo adesso
 Output: welcome to covariant return type 
Più dettagli.

89) Qual è l'output del seguente programma 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(); } } 

Produzione

 Derived method called ... 

Spiegazione

Il metodo della classe Base, ovvero baseMethod(), viene sovrascritto nella classe Derived. Nella classe Test, la variabile di riferimento b (di tipo classe Base) si riferisce all'istanza della classe Derived. Qui, il polimorfismo di runtime viene raggiunto tra la classe Base e Derived. In fase di compilazione, viene verificata la presenza del metodo baseMethod nella classe Base. Se è presente, il programma verrà compilato, altrimenti verrà mostrato l'errore del compilatore. In questo caso, baseMethod è presente nella classe Base; pertanto viene compilato correttamente. Tuttavia, in fase di esecuzione, controlla se baseMethod è stato sovrascritto dalla classe Derived, in tal caso viene chiamato il metodo della classe Derived altrimenti viene chiamato il metodo della classe Base. In questo caso, la classe Derived sovrascrive baseMethod; pertanto, viene chiamato il metodo della classe Derived.


Core Java - Concetti OOP: parola chiave finale Domande di intervista


90) Qual è la variabile finale?

In Java, la variabile finale viene utilizzata per impedire all'utente di aggiornarla. Se inizializziamo la variabile finale, non possiamo cambiarne il valore. In altre parole, possiamo dire che la variabile finale, una volta assegnata a un valore, non potrà più essere modificata successivamente. La variabile finale a cui non è assegnato alcun valore può essere assegnata solo tramite il costruttore della classe.

parola chiave finale in 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 
Provalo adesso
 Output:Compile Time Error 
Più dettagli.

91) Qual è il metodo finale?

Se modifichiamo un metodo in un metodo finale, non possiamo sovrascriverlo. Più dettagli.

 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(); } } 
Provalo adesso
 Output:Compile Time Error 

92) Qual è la lezione finale?

Se rendiamo definitiva una classe, non potremo ereditarla in nessuna delle sottoclassi.

 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(); } } 
Provalo adesso
 Output:Compile Time Error 
Più dettagli.

93) Qual è la variabile vuota finale?

Una variabile finale, non inizializzata al momento della dichiarazione, è nota come variabile vuota finale. Non possiamo inizializzare direttamente la variabile vuota finale. Dobbiamo invece inizializzarlo utilizzando il costruttore della classe. È utile nel caso in cui l'utente abbia alcuni dati che non devono essere modificati da altri, ad esempio il numero PAN. Considera il seguente esempio:

 class Student{ int id; String name; final String PAN_CARD_NUMBER; ... } 
Più dettagli.

94) Possiamo inizializzare la variabile vuota finale?

Sì, se non è statico, possiamo inizializzarlo nel costruttore. Se si tratta di una variabile finale vuota statica, può essere inizializzata solo nel blocco statico. Più dettagli.


95) Puoi dichiarare il metodo main come finale?

Sì, possiamo dichiarare il metodo main come public static final void main(String[] args){}.


96) Qual è l'output del seguente programma Java?

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

Produzione

 20 

Spiegazione

Poiché i è la variabile finale vuota. Può essere inizializzato solo una volta. Lo abbiamo inizializzato a 20. Pertanto, verrà stampato 20.


97) Qual è l'output del seguente programma 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(); } } 

Produzione

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

Spiegazione

Il metodo getDetails() è definitivo; pertanto non può essere sovrascritto nella sottoclasse.


98) Possiamo dichiarare un costruttore come finale?

Il costruttore non può mai essere dichiarato finale perché non viene mai ereditato. I costruttori non sono metodi ordinari; pertanto, non ha senso dichiarare i costruttori come final. Tuttavia, se provi a farlo, il compilatore genererà un errore.


99) Possiamo dichiarare un'interfaccia come definitiva?

No, non possiamo dichiarare un'interfaccia come finale perché l'interfaccia deve essere implementata da qualche classe per fornire la sua definizione. Pertanto, non ha senso rendere definitiva un'interfaccia. Tuttavia, se provi a farlo, il compilatore mostrerà un errore.


100) Qual è la differenza tra metodo finale e metodo astratto?

La differenza principale tra il metodo finale e il metodo astratto è che il metodo astratto non può essere finale poiché dobbiamo sovrascriverli nella sottoclasse per darne la definizione.