logo

300 questions d'entretien sur le noyau Java | Ensemble 1

90 % d’assurance des questions d’entretien

Il y a la liste des 300 questions d’entretien Java de base. Si une question d'entretien Java fondamentale vous a été posée, veuillez la publier dans la section Poser des questions. Nous vous assurons que vous obtiendrez ici les 90 % de questions et réponses d’entretien fréquemment posées.

Les réponses aux questions d'entretien Core Java sont courtes et précises. Les principales questions d'entretien Java sont classées dans les questions d'entretien de base de Java, les questions d'entretien de POO, les questions d'entretien de gestion des chaînes, les questions d'entretien multithreading, les questions d'entretien de collection, les questions d'entretien JDBC, etc.


1 2 3 4 5

Core Java : bases de Java Questions d'entretien


1) Qu’est-ce que Java ?

Java est le haut niveau, orienté objet , langage de programmation robuste et sécurisé, indépendant de la plate-forme, hautes performances, multithread et portable. Il a été développé par James Gosling en juin 1991. Elle peut également être connue sous le nom de plate-forme car elle fournit son propre JRE et sa propre API.


2) Quelles sont les différences entre C++ et Java ?

Les différences entre C++ et Java sont indiqués dans le tableau suivant.

Indice de comparaison C++Java
Indépendant de la plateforme C++ dépend de la plate-forme.Java est indépendant de la plate-forme.
Principalement utilisé pour Le C++ est principalement utilisé pour la programmation système.Java est principalement utilisé pour la programmation d'applications. Il est largement utilisé dans les applications Windows, Web, d'entreprise et mobiles.
Objectif de conception Le C++ a été conçu pour la programmation de systèmes et d'applications. C'était une extension de Langage de programmation C .Java a été conçu et créé comme un interpréteur pour les systèmes d'impression, mais a ensuite été étendu en tant que support informatique en réseau. Il a été conçu dans le but d’être facile à utiliser et accessible à un public plus large.
Aller à C++ prend en charge l'instruction goto.Java ne prend pas en charge l'instruction goto.
Héritage multiple C++ prend en charge l'héritage multiple.Java ne prend pas en charge l'héritage multiple via la classe. Cela peut être réalisé par interface en java .
Surcharge de l'opérateur Prise en charge du C++ surcharge de l'opérateur .Java ne prend pas en charge la surcharge des opérateurs.
Pointeurs C++ prend en charge les pointeurs . Vous pouvez écrire un programme de pointeur en C++.Java prend en charge le pointeur en interne. Cependant, vous ne pouvez pas écrire le programme de pointeur en Java. Cela signifie que Java a une prise en charge limitée des pointeurs en Java.
Compilateur et interprète C++ utilise uniquement le compilateur. C++ est compilé et exécuté à l'aide du compilateur qui convertit le code source en code machine. C++ dépend donc de la plate-forme.Java utilise à la fois un compilateur et un interpréteur. Le code source Java est converti en bytecode au moment de la compilation. L'interpréteur exécute ce bytecode au moment de l'exécution et produit une sortie. Java est interprété comme étant indépendant de la plate-forme.
Appel par valeur et Appel par référence C++ prend en charge à la fois l'appel par valeur et l'appel par référence.Java prend en charge uniquement les appels par valeur. Il n'y a pas d'appel par référence en Java.
Structure et syndicat C++ prend en charge les structures et les unions.Java ne prend pas en charge les structures et les syndicats.
Prise en charge des fils de discussion C++ ne prend pas en charge les threads. Il s'appuie sur des bibliothèques tierces pour la prise en charge des threads.Java a intégré fil soutien.
Commentaire sur la documentation C++ ne prend pas en charge les commentaires sur la documentation.Java prend en charge les commentaires de documentation (/** ... */) pour créer une documentation pour le code source Java.
Mot-clé virtuel C++ prend en charge le mot-clé virtuel afin que nous puissions décider de remplacer ou non une fonction.Java n'a pas de mot-clé virtuel. Nous pouvons remplacer toutes les méthodes non statiques par défaut. En d’autres termes, les méthodes non statiques sont virtuelles par défaut.
décalage à droite non signé >>> C++ ne prend pas en charge l'opérateur >>>.Java prend en charge l'opérateur de décalage à droite non signé >>> qui remplit zéro en haut pour les nombres négatifs. Pour les nombres positifs, cela fonctionne de la même manière que l'opérateur >>.
Arbre d'héritage C++ crée toujours un nouvel arbre d'héritage.Java utilise toujours un seul arbre d'héritage car toutes les classes sont les enfants de la classe Object en Java. La classe d'objet est la racine du héritage arbre en Java.
Matériel Le C++ est plus proche du matériel.Java n'est pas si interactif avec le matériel.
Orienté objet C++ est un langage orienté objet. Cependant, en langage C, une hiérarchie racine unique n’est pas possible.Java est aussi un orienté objet langue. Cependant, tout (sauf les types fondamentaux) est un objet en Java. Il s'agit d'une hiérarchie racine unique car tout est dérivé de java.lang.Object.

3) Répertoriez les fonctionnalités du langage de programmation Java.

Il existe les fonctionnalités suivantes dans le langage de programmation Java.

    Simple:Java est facile à apprendre. La syntaxe de Java est basée sur C++, ce qui facilite l'écriture du programme.
    Orienté objet :Java suit le paradigme orienté objet qui nous permet de maintenir notre code comme une combinaison de différents types d'objets intégrant à la fois des données et un comportement.
    Portable:Java prend en charge l'approche lecture une fois, écriture n'importe où. Nous pouvons exécuter le programme Java sur chaque machine. Le programme Java (.java) est converti en bytecode (.class) qui peut être facilement exécuté sur chaque machine.
    Indépendant de la plateforme :Java est un langage de programmation indépendant de la plateforme. Il est différent des autres langages de programmation comme le C et le C++ qui nécessitent une plateforme pour être exécutés. Java est livré avec sa plateforme sur laquelle son code est exécuté. Java ne dépend pas du système d'exploitation à exécuter.
    Sécurisé :Java est sécurisé car il n'utilise pas de pointeurs explicites. Java fournit également le concept de gestion du ByteCode et des exceptions, ce qui le rend plus sécurisé.
    Robuste:Java est un langage de programmation puissant car il utilise une gestion rigoureuse de la mémoire. Les concepts tels que le garbage collection automatique, la gestion des exceptions, etc. le rendent plus robuste.
    Architecture neutre :Java est architecturalement neutre car il ne dépend pas de l'architecture. En C, la taille des types de données peut varier selon l'architecture (32 bits ou 64 bits) ce qui n'existe pas en Java.
    Interprété :Java utilise l'interpréteur Just-in-time (JIT) avec le compilateur pour l'exécution du programme.
    Haute performance:Java est plus rapide que les autres langages de programmation interprétés traditionnels car le bytecode Java est « proche » du code natif. Il est encore un peu plus lent qu'un langage compilé (par exemple C++).
    Multithread :Nous pouvons écrire des programmes Java qui traitent plusieurs tâches à la fois en définissant plusieurs threads. Le principal avantage du multi-threading est qu’il n’occupe pas de mémoire pour chaque thread. Il partage une zone mémoire commune. Les fils de discussion sont importants pour le multimédia, les applications Web, etc.
    Distribué:Java est distribué car il permet aux utilisateurs de créer des applications distribuées en Java. RMI et EJB sont utilisés pour créer des applications distribuées. Cette fonctionnalité de Java nous permet d'accéder aux fichiers en appelant les méthodes depuis n'importe quelle machine sur Internet.
    Dynamique:Java est un langage dynamique. Il prend en charge le chargement dynamique des classes. Cela signifie que les cours sont chargés à la demande. Il prend également en charge les fonctions de ses langages natifs, à savoir C et C++.

4) Qu’entendez-vous par machine virtuelle Java ?

Machine virtuelle Java est une machine virtuelle qui permet à l'ordinateur d'exécuter le programme Java. JVM agit comme un moteur d'exécution qui appelle la méthode principale présente dans le code Java. JVM est la spécification qui doit être implémentée dans le système informatique. Le code Java est compilé par JVM pour être un Bytecode indépendant de la machine et proche du code natif.


5) Quelle est la différence entre JDK, JRE et JVM ?

JVM

JVM est un acronyme pour Java Virtual Machine ; c'est une machine abstraite qui fournit l'environnement d'exécution dans lequel le bytecode Java peut être exécuté. Il s'agit d'une spécification qui spécifie le fonctionnement de la machine virtuelle Java. Sa mise en œuvre a été assurée par Oracle et d'autres sociétés. Son implémentation est connue sous le nom de JRE.

Les JVM sont disponibles pour de nombreuses plates-formes matérielles et logicielles (la JVM dépend donc de la plate-forme). Il s'agit d'une instance d'exécution qui est créée lorsque nous exécutons la classe Java. Il existe trois notions de la JVM : spécification, implémentation et instance.

JRE

JRE signifie Java Runtime Environment. C'est l'implémentation de JVM. Le Java Runtime Environment est un ensemble d'outils logiciels utilisés pour développer des applications Java. Il est utilisé pour fournir l’environnement d’exécution. C'est l'implémentation de JVM. Il existe physiquement. Il contient un ensemble de bibliothèques + d'autres fichiers que JVM utilise au moment de l'exécution.

JDK

JDK est un acronyme pour Java Development Kit. Il s'agit d'un environnement de développement logiciel utilisé pour développer des applications et des applets Java. Il existe physiquement. Il contient des outils de développement JRE +. JDK est une implémentation de l'une des plates-formes Java ci-dessous publiées par Oracle Corporation :

  • Plateforme Java édition standard
  • Plateforme Java édition entreprise
  • Plateforme Java Micro Édition
Plus de détails.

6) Combien de types de zones mémoire sont alloués par JVM ?

Beaucoup de sortes:

    Zone de classe (méthode) :Class Area stocke les structures par classe telles que le pool de constantes d’exécution, le champ, les données de méthode et le code des méthodes.Tas:C'est la zone de données d'exécution dans laquelle la mémoire est allouée aux objetsEmpiler:Java Stack stocke les images. Il contient des variables locales et des résultats partiels, et joue un rôle dans l'invocation et le retour de méthodes. Chaque thread possède une pile JVM privée, créée en même temps que le thread. Un nouveau frame est créé à chaque fois qu'une méthode est invoquée. Une trame est détruite une fois l’invocation de sa méthode terminée.Registre du compteur de programme :Le registre PC (compteur de programme) contient l'adresse de l'instruction de la machine virtuelle Java en cours d'exécution.Pile de méthodes natives :Il contient toutes les méthodes natives utilisées dans l'application.
Plus de détails.

7) Qu’est-ce que le compilateur JIT ?

Compilateur juste à temps (JIT) : Il est utilisé pour améliorer les performances. JIT compile simultanément des parties du bytecode qui ont des fonctionnalités similaires, ce qui réduit ainsi le temps nécessaire à la compilation. Ici, le terme compilateur fait référence à un traducteur du jeu d'instructions d'une machine virtuelle Java (JVM) vers le jeu d'instructions d'un processeur spécifique.


8) Quelle est la plateforme ?

Une plate-forme est l'environnement matériel ou logiciel dans lequel un logiciel est exécuté. Il existe deux types de plates-formes, logicielles et matérielles. Java fournit la plate-forme logicielle.


9) Quelles sont les principales différences entre la plateforme Java et les autres plateformes ?

Il existe les différences suivantes entre la plateforme Java et les autres plateformes.

  • Java est la plate-forme logicielle tandis que d'autres plates-formes peuvent être des plates-formes matérielles ou des plates-formes logicielles.
  • Java est exécuté sur d'autres plates-formes matérielles, alors que les autres plates-formes ne peuvent disposer que des composants matériels.

10) Qu'est-ce qui donne à Java sa nature « écrire une fois et exécuter n'importe où » ?

Le bytecode. Le compilateur Java convertit les programmes Java en fichier de classe (Byte Code) qui est le langage intermédiaire entre le code source et le code machine. Ce bytecode n'est pas spécifique à la plate-forme et peut être exécuté sur n'importe quel ordinateur.


11) Qu'est-ce que le chargeur de classes ?

Classloader est un sous-système de JVM utilisé pour charger des fichiers de classe. Chaque fois que nous exécutons le programme Java, il est chargé en premier par le chargeur de classe. Il existe trois chargeurs de classes intégrés en Java.

    Chargeur de classe Bootstrap: Il s'agit du premier chargeur de classe qui est la superclasse du chargeur de classe Extension. Il charge le rt.jar fichier qui contient tous les fichiers de classe de Java Standard Edition comme les classes de package java.lang, les classes de package java.net, les classes de package java.util, les classes de package java.io, les classes de package java.sql, etc.Chargeur de classe d'extension: Il s'agit du chargeur de classe enfant de Bootstrap et du chargeur de classe parent du chargeur de classe système. Il charge les fichiers jar situés à l'intérieur $JAVA_HOME/jre/lib/ext annuaire.Chargeur de classe système/application: Il s'agit du chargeur de classe enfant du chargeur de classe Extension. Il charge les fichiers de classe à partir du chemin de classe. Par défaut, le chemin de classe est défini sur le répertoire actuel. Vous pouvez modifier le chemin de classe à l'aide du commutateur « -cp » ou « -classpath ». Il est également connu sous le nom de chargeur de classe d'application.

12) Le nom de fichier .java vide est-il un nom de fichier source valide ?

Oui, Java permet de sauvegarder notre fichier java en .Java seulement, nous devons le compiler par javac .java et dirigé par nom de classe Java Prenons un exemple simple :

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

compilez-le par javac .java

exécutez-le par Java A


13) Le mot-clé delete, next, main, exit ou null est-il en java ?

Non.


14) Si je ne fournis aucun argument sur la ligne de commande, quelle sera la valeur stockée dans le tableau String transmise à la méthode main(), vide ou NULL ?

C'est vide, mais pas nul.


15) Que se passe-t-il si j'écris static public void au lieu de public static void ?

Le programme se compile et s'exécute correctement car l'ordre des spécificateurs n'a pas d'importance en Java.


16) Quelle est la valeur par défaut des variables locales ?

Les variables locales ne sont initialisées à aucune valeur par défaut, ni primitives ni références d'objet.


17) Quels sont les différents spécificateurs d’accès en Java ?

En Java, les spécificateurs d'accès sont les mots-clés utilisés pour définir la portée d'accès de la méthode, de la classe ou d'une variable. En Java, il existe quatre spécificateurs d'accès indiqués ci-dessous.

    PubliqueLes classes, méthodes ou variables définies comme publiques sont accessibles par n'importe quelle classe ou méthode.ProtégéProtected est accessible par la classe du même package, ou par la sous-classe de cette classe, ou au sein de la même classe.DéfautLes valeurs par défaut sont accessibles uniquement dans le package. Par défaut, toutes les classes, méthodes et variables ont une portée par défaut.PrivéLa classe privée, les méthodes ou les variables définies comme privées sont accessibles uniquement au sein de la classe.

18) Quel est le but des méthodes et variables statiques ?

Les méthodes ou variables définies comme statiques sont partagées entre tous les objets de la classe. Le statique fait partie de la classe et non de l'objet. Les variables statiques sont stockées dans la zone de classe et nous n'avons pas besoin de créer l'objet pour accéder à ces variables. Par conséquent, static est utilisé dans le cas où nous devons définir des variables ou des méthodes communes à tous les objets de la classe.

Par exemple, dans la classe simulant le regroupement des étudiants d'un collège, le nom du collège est l'attribut commun à tous les étudiants. Par conséquent, le nom du collège sera défini comme suit : statique .


19) Quels sont les avantages des packages en Java ?

La définition de packages en Java présente de nombreux avantages.

  • Les packages évitent les conflits de noms.
  • Le package offre un contrôle d’accès plus facile.
  • Nous pouvons également avoir les classes cachées qui ne sont pas visibles à l'extérieur et utilisées par le package.
  • Il est plus facile de localiser les classes associées.

20) Quel est le résultat du programme Java suivant ?

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

La sortie du code ci-dessus sera

 30Javatpoint Javatpoint1020 

Explication

Dans le premier cas, 10 et 20 sont traités comme des nombres et ajoutés pour obtenir 30. Désormais, leur somme 30 est traitée comme la chaîne et concaténée avec la chaîne Javatpoint . Le résultat sera donc 30Javapoint .

Dans le deuxième cas, la chaîne Javatpoint est concaténée avec 10 pour être la chaîne Javatpoint10 qui sera ensuite concaténé avec 20 pour être Javatpoint1020 .


21) Quel est le résultat du programme Java suivant ?

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

La sortie du code ci-dessus sera

 200Javatpoint Javatpoint200 

Explication

Dans le premier cas, les nombres 10 et 20 seront d'abord multipliés puis le résultat 200 est traité comme la chaîne et concaténé avec la chaîne Javatpoint pour produire le résultat 200Javapoint .

Dans le deuxième cas, les nombres 10 et 20 seront d'abord multipliés pour obtenir 200 car la priorité de la multiplication est supérieure à l'addition. Le résultat 200 sera traité comme la chaîne et concaténé avec la chaîne Javatpoint pour produire le résultat comme Javatpoint200 .


22) Quel est le résultat du programme Java suivant ?

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

Le code ci-dessus donnera une erreur de compilation car la boucle for demande une valeur booléenne dans la deuxième partie et nous fournissons une valeur entière, c'est-à-dire 0.


Core Java - Concepts de POO : questions d'entretien initiales sur les POO

Il y a plus de 50 questions d'entretien POO (Programmation et Système Orientés Objet). Cependant, ils ont été classés dans de nombreuses sections telles que les questions d'entretien de constructeur, les questions d'entretien statiques, les questions d'entretien d'héritage, les questions d'entretien d'abstraction, les questions d'entretien de polymorphisme, etc. pour une meilleure compréhension.


23) Qu'est-ce que le paradigme orienté objet ?

Il s'agit d'un paradigme de programmation basé sur des objets ayant des données et des méthodes définies dans la classe à laquelle ils appartiennent. Le paradigme orienté objet vise à intégrer les avantages de la modularité et de la réutilisabilité. Les objets sont les instances de classes qui interagissent les unes avec les autres pour concevoir des applications et des programmes. Il existe les caractéristiques suivantes du paradigme orienté objet.

  • Suit l’approche ascendante dans la conception des programmes.
  • Concentrez-vous sur les données avec des méthodes pour opérer sur les données de l'objet
  • Inclut des concepts tels que l'encapsulation et l'abstraction qui cachent les complexités à l'utilisateur et n'affichent que les fonctionnalités.
  • Implémente l'approche temps réel comme l'héritage, l'abstraction, etc.
  • Les exemples du paradigme orienté objet sont C++, Simula, Smalltalk, Python, C#, etc.

24) Qu'est-ce qu'un objet ?

L'objet est l'entité en temps réel ayant un état et un comportement. En Java, Object est une instance de la classe ayant les variables d'instance comme état de l'objet et les méthodes comme comportement de l'objet. L'objet d'une classe peut être créé en utilisant le nouveau mot-clé.


25) Quelle est la différence entre un langage de programmation orienté objet et un langage de programmation basé sur les objets ?

Il existe les différences fondamentales suivantes entre le langage orienté objet et le langage basé sur les objets.

  • Les langages orientés objet suivent tous les concepts de la POO alors que le langage basé sur les objets ne suit pas tous les concepts de la POO comme l'héritage et le polymorphisme.
  • Les langages orientés objet n'ont pas d'objets intégrés alors que les langages basés sur des objets ont les objets intégrés, par exemple, JavaScript a un objet fenêtre.
  • Des exemples de programmation orientée objet sont Java, C#, Smalltalk, etc. tandis que les exemples de langages basés sur les objets sont JavaScript, VBScript, etc.

26) Quelle sera la valeur initiale d'une référence d'objet définie comme variable d'instance ?

Toutes les références d'objet sont initialisées à null en Java.


Core Java - Concepts de POO : questions d'entretien avec les constructeurs


27) Quel est le constructeur ?

Le constructeur peut être défini comme le type spécial de méthode utilisé pour initialiser l’état d’un objet. Il est invoqué lorsque la classe est instanciée et que la mémoire est allouée à l'objet. A chaque fois, un objet est créé à l'aide du nouveau mot-clé, le constructeur par défaut de la classe est appelé. Le nom du constructeur doit être similaire au nom de la classe. Le constructeur ne doit pas avoir de type de retour explicite.

Plus de détails.

28) Combien de types de constructeurs sont utilisés en Java ?

Sur la base des paramètres passés dans les constructeurs, il existe deux types de constructeurs en Java.

    Constructeur par défaut :le constructeur par défaut est celui qui n’accepte aucune valeur. Le constructeur par défaut est principalement utilisé pour initialiser la variable d'instance avec les valeurs par défaut. Il peut également être utilisé pour effectuer des tâches utiles lors de la création d'objets. Un constructeur par défaut est invoqué implicitement par le compilateur si aucun constructeur n'est défini dans la classe.Constructeur paramétré :Le constructeur paramétré est celui qui peut initialiser les variables d'instance avec les valeurs données. En d’autres termes, on peut dire que les constructeurs qui peuvent accepter les arguments sont appelés constructeurs paramétrés.
Constructeurs Java

29) Quel est le but d'un constructeur par défaut ?

Le but du constructeur par défaut est d'attribuer la valeur par défaut aux objets. Le compilateur Java crée implicitement un constructeur par défaut s'il n'y a pas de constructeur dans la 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(); } } 
Testez-le maintenant

Sortir:

 0 null 0 null 

Explication: Dans la classe ci-dessus, vous ne créez aucun constructeur, le compilateur vous fournit donc un constructeur par défaut. Ici, les valeurs 0 et nulles sont fournies par le constructeur par défaut.

Constructeur Java par défaut
Plus de détails.

30) Le constructeur renvoie-t-il une valeur ?

Ans: oui, le constructeur renvoie implicitement l'instance actuelle de la classe (vous ne pouvez pas utiliser un type de retour explicite avec le constructeur). Plus de détails.


31) Le constructeur est-il hérité ?

Non, le constructeur n'est pas hérité.


32) Peut-on faire une finale constructeur ?

Non, le constructeur ne peut pas être définitif.

où puis-je trouver les paramètres de mon navigateur

33) Peut-on surcharger les constructeurs ?

Oui, les constructeurs peuvent être surchargés en modifiant le nombre d'arguments acceptés par le constructeur ou en modifiant le type de données des paramètres. Considérez l'exemple suivant.

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

Dans le programme ci-dessus, le constructeur Test est surchargé avec un autre constructeur. Au premier appel au constructeur, le constructeur avec un argument est appelé, et i sera initialisé avec la valeur 10. Cependant, au deuxième appel au constructeur, le constructeur avec les 2 arguments est appelé, et i sera initialisé avec la valeur 15.


34) Qu’entendez-vous par constructeur de copie en Java ?

Il n'y a pas de constructeur de copie en Java. Cependant, nous pouvons copier les valeurs d'un objet à un autre comme un constructeur de copie en C++.

Il existe de nombreuses façons de copier les valeurs d’un objet dans un autre en Java. Ils sont:

  • Par constructeur
  • En attribuant les valeurs d'un objet à un autre
  • Par la méthode clone() de la classe Object

Dans cet exemple, nous allons copier les valeurs d'un objet dans un autre à l'aide du constructeur 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(); } } 
Testez-le maintenant

Sortir:

 111 Karan 111 Karan 

35) Quelles sont les différences entre les constructeurs et les méthodes ?

Il existe de nombreuses différences entre les constructeurs et les méthodes. Ils sont donnés ci-dessous.

Constructeur JavaMéthode Java
Un constructeur est utilisé pour initialiser l'état d'un objet.Une méthode est utilisée pour exposer le comportement d’un objet.
Un constructeur ne doit pas avoir de type de retour.Une méthode doit avoir un type de retour.
Le constructeur est invoqué implicitement.La méthode est invoquée explicitement.
Le compilateur Java fournit un constructeur par défaut si vous n'avez aucun constructeur dans une classe.La méthode n’est en aucun cas fournie par le compilateur.
Le nom du constructeur doit être le même que le nom de la classe.Le nom de la méthode peut ou non être identique au nom de la classe.

Constructeurs Java et méthodes

36) Quel est le résultat du programme Java suivant ?

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

Le résultat du programme suivant est :

 a = 10 b = 15 

Ici, le type de données des variables a et b, c'est-à-dire byte, est promu en int, et le premier constructeur paramétré avec les deux paramètres entiers est appelé.


37) Quel est le résultat du programme Java suivant ?

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

La sortie du programme est 0 car la variable i est initialisée à 0 en interne. Comme on sait qu'un constructeur par défaut est invoqué implicitement s'il n'y a pas de constructeur dans la classe, la variable i est initialisée à 0 puisqu'il n'y a pas de constructeur dans la classe.


38) Quel est le résultat du programme Java suivant ?

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

Il y a un erreur du compilateur dans le programme car il y a un appel au constructeur par défaut dans la méthode principale qui n'est pas présent dans la classe. Cependant, il n’existe qu’un seul constructeur paramétré dans la classe Test. Par conséquent, aucun constructeur par défaut n’est invoqué implicitement par le constructeur.


Core Java - Concepts POO : questions d'entretien avec mots clés statiques


39) Quelle est la variable statique ?

La variable statique est utilisée pour faire référence à la propriété commune de tous les objets (qui n'est pas unique pour chaque objet), par exemple le nom de l'entreprise des employés, le nom de l'université des étudiants, etc. La variable statique n'obtient la mémoire qu'une seule fois dans la zone de classe à le moment du chargement des cours. L'utilisation d'une variable statique rend votre programme plus efficace en termes de mémoire (cela économise de la mémoire). La variable statique appartient à la classe plutôt qu'à l'objet.

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

Plus de détails.

40) Qu'est-ce que la méthode statique ?

  • Une méthode statique appartient à la classe plutôt qu'à l'objet.
  • Il n'est pas nécessaire de créer l'objet pour appeler les méthodes statiques.
  • Une méthode statique peut accéder et modifier la valeur de la variable statique.
Plus de détails.

41) Quelles sont les restrictions appliquées aux méthodes statiques Java ?

Deux restrictions principales sont appliquées aux méthodes statiques.

  • La méthode statique ne peut pas utiliser de données membres non statiques ni appeler directement la méthode non statique.
  • this et super ne peuvent pas être utilisés dans un contexte statique car ils ne sont pas statiques.

42) Pourquoi la méthode principale est-elle statique ?

Parce que l'objet n'est pas obligé d'appeler la méthode statique. Si nous rendons la méthode principale non statique, JVM devra d'abord créer son objet, puis appeler la méthode main(), ce qui entraînera une allocation de mémoire supplémentaire. Plus de détails.


43) Pouvons-nous remplacer les méthodes statiques ?

Non, nous ne pouvons pas remplacer les méthodes statiques.

44) Qu'est-ce que le bloc statique ?

Le bloc statique est utilisé pour initialiser le membre de données statique. Elle est exécutée avant la méthode principale, au moment du chargement de la classe.

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

Plus de détails.

45) Pouvons-nous exécuter un programme sans la méthode main() ?

Ans) Non, c'était possible avant JDK 1.7 en utilisant le bloc statique. Depuis JDK 1.7, ce n'est plus possible. Plus de détails.


46) Que se passe-t-il si le modificateur static est supprimé de la signature de la méthode principale ?

Le programme se compile. Cependant, au moment de l'exécution, il renvoie une erreur « NoSuchMethodError ».


47) Quelle est la différence entre la méthode statique (classe) et la méthode d'instance ?

méthode statique ou de classeméthode d'instance
1) Une méthode déclarée comme statique est appelée méthode statique.Une méthode qui n’est pas déclarée comme statique est appelée méthode d’instance.
2) Nous n’avons pas besoin de créer les objets pour appeler les méthodes statiques.L'objet est requis pour appeler les méthodes d'instance.
3) Les membres non statiques (instance) ne sont pas accessibles directement dans le contexte statique (méthode statique, bloc statique et classe imbriquée statique).Les variables statiques et non statiques sont toutes deux accessibles dans les méthodes d'instance.
4)Par exemple : public static int cube(int n){ return n*n*n;}Par exemple : public void msg(){...}.

48) Pouvons-nous rendre les constructeurs statiques ?

Comme nous le savons, le contexte statique (méthode, bloc ou variable) appartient à la classe et non à l'objet. Étant donné que les constructeurs ne sont invoqués que lorsque l'objet est créé, cela n'a aucun sens de rendre les constructeurs statiques. Cependant, si vous essayez de le faire, le compilateur affichera l’erreur du compilateur.


49) Pouvons-nous rendre les méthodes abstraites statiques en Java ?

En Java, si nous rendons les méthodes abstraites statiques, elles deviendront une partie de la classe et nous pourrons l'appeler directement, ce qui n'est pas nécessaire. Appeler une méthode non définie est totalement inutile et n’est donc pas autorisé.


50) Pouvons-nous déclarer les variables et méthodes statiques dans une classe abstraite ?

Oui, nous pouvons déclarer des variables et des méthodes statiques dans une méthode abstraite. Comme nous savons qu'il n'est pas nécessaire que l'objet accède au contexte statique, nous pouvons donc accéder au contexte statique déclaré à l'intérieur de la classe abstraite en utilisant le nom de la classe abstraite. Considérez l'exemple suivant.

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

Sortir

 hi !! I am good !! i = 102 

Core Java - Concepts de POO : questions d'entretien sur l'héritage


51) Qu'est-ce que ce mot-clé en Java ?

Le ce Le mot-clé est une variable de référence qui fait référence à l'objet actuel. Il existe différentes utilisations de ce mot-clé en Java. Il peut être utilisé pour faire référence aux propriétés de classe actuelles telles que les méthodes d'instance, les variables, les constructeurs, etc. Il peut également être passé comme argument dans les méthodes ou les constructeurs. Il peut également être renvoyé par la méthode en tant qu'instance de classe actuelle.

java ce mot-clé
Plus de détails.

52) Quelles sont les principales utilisations de ce mot-clé ?

Il existe les utilisations suivantes de ce mot-clé.

    cepeut être utilisé pour faire référence à la variable d'instance de classe actuelle.cepeut être utilisé pour invoquer la méthode de classe actuelle (implicitement)ce()peut être utilisé pour appeler le constructeur de classe actuel.cepeut être passé en argument dans l’appel de méthode.cepeut être passé en argument dans l’appel du constructeur.cepeut être utilisé pour renvoyer l’instance de classe actuelle à partir de la méthode.

53) Pouvons-nous attribuer la référence à ce variable?

Non, cela ne peut être attribué à aucune valeur car il pointe toujours vers l'objet de classe actuel et c'est la référence finale en Java. Cependant, si nous essayons de le faire, l’erreur du compilateur s’affichera. Considérez l'exemple suivant.

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

Sortir

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

54) Peut ce Le mot-clé doit-il être utilisé pour référencer des membres statiques ?

Oui, il est possible d'utiliser ce mot-clé pour référencer des membres statiques car il s'agit simplement d'une variable de référence qui fait référence à l'objet de classe actuel. Cependant, comme nous le savons, il n'est pas nécessaire d'accéder aux variables statiques via des objets. Ce n'est donc pas la meilleure pratique de l'utiliser pour référencer des membres statiques. Considérez l'exemple suivant.

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

Sortir

 10 

55) Comment effectuer un chaînage de constructeurs à l'aide de ce mot-clé ?

Le chaînage de constructeurs nous permet d'appeler un constructeur à partir d'un autre constructeur de la classe par rapport à l'objet de classe actuel. Nous pouvons utiliser ce mot-clé pour effectuer un chaînage de constructeurs au sein de la même classe. Considérons l'exemple suivant qui illustre comment utiliser ce mot-clé pour réaliser le chaînage de constructeurs.

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

Sortir

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

56) Quels sont les avantages de transmettre cela dans une méthode au lieu de l'objet de classe actuel lui-même ?

Comme nous le savons, cela fait référence à l'objet de classe actuel, il doit donc être similaire à l'objet de classe actuel. Cependant, il peut y avoir deux avantages principaux à passer cela dans une méthode au lieu de l'objet de classe actuel.

  • c'est une variable finale. Par conséquent, cela ne peut être attribué à aucune nouvelle valeur alors que l’objet de classe actuel peut ne pas être définitif et peut être modifié.
  • cela peut être utilisé dans le bloc synchronisé.

57) Qu'est-ce que l'héritage ?

L'héritage est un mécanisme par lequel un objet acquiert toutes les propriétés et le comportement d'un autre objet d'une autre classe. Il est utilisé pour la réutilisabilité du code et le remplacement des méthodes. L'idée derrière l'héritage en Java est que vous pouvez créer de nouvelles classes basées sur des classes existantes. Lorsque vous héritez d'une classe existante, vous pouvez réutiliser les méthodes et les champs de la classe parent. De plus, vous pouvez également ajouter de nouvelles méthodes et champs dans votre classe actuelle. L'héritage représente la relation IS-A, également connue sous le nom de relation parent-enfant.

Il existe cinq types d'héritage en Java.

  • Héritage à un seul niveau
  • Héritage à plusieurs niveaux
  • Héritage Multiple
  • Héritage hiérarchique
  • Héritage hybride

L'héritage multiple n'est pas pris en charge en Java via la classe.

Plus de détails.

58) Pourquoi l'héritage est-il utilisé en Java ?

L’utilisation de l’héritage en Java présente divers avantages, indiqués ci-dessous.

  • L'héritage permet la réutilisabilité du code. La classe dérivée n'a pas besoin de redéfinir la méthode de la classe de base, sauf si elle doit fournir l'implémentation spécifique de la méthode.
  • Le polymorphisme d'exécution ne peut être obtenu sans utiliser l'héritage.
  • Nous pouvons simuler l'héritage de classes avec les objets temps réel, ce qui rend les POO plus réalistes.
  • L'héritage permet de masquer les données. La classe de base peut masquer certaines données de la classe dérivée en les rendant privées.
  • Le remplacement de méthode ne peut pas être réalisé sans héritage. Par substitution de méthode, nous pouvons donner une implémentation spécifique d’une méthode de base contenue dans la classe de base.

59) Quelle classe est la superclasse de toutes les classes ?

La classe objet est la superclasse de toutes les autres classes Java.


60) Pourquoi l’héritage multiple n’est-il pas pris en charge en Java ?

Pour réduire la complexité et simplifier le langage, l'héritage multiple n'est pas pris en charge en Java. Considérons un scénario dans lequel A, B et C sont trois classes. La classe C hérite des classes A et B. Si les classes A et B ont la même méthode et que vous l’appelez à partir d’un objet de classe enfant, il y aura une ambiguïté pour appeler la méthode de la classe A ou B.

Étant donné que les erreurs de compilation sont meilleures que les erreurs d’exécution, Java affiche une erreur de compilation si vous héritez de 2 classes. Ainsi, que vous ayez la même méthode ou une méthode différente, il y aura une erreur de compilation.

 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? } } 
Testez-le maintenant
 Compile Time Error 

61) Qu’est-ce que l’agrégation ?

L'agrégation peut être définie comme la relation entre deux classes où la classe agrégée contient une référence à la classe qu'elle possède. L'agrégation est mieux décrite comme un a un relation. Par exemple, la classe agrégée Employé ayant divers champs tels que l'âge, le nom et le salaire contient également un objet de classe Adresse ayant divers champs tels que Ligne d'adresse 1, Ville, État et code PIN. En d’autres termes, nous pouvons dire que Employee (classe) a un objet de classe Address. Considérez l'exemple suivant.

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

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

Sortir

 111 varun gzb UP india 112 arun gno UP india 

62) Qu'est-ce que la composition ?

Conserver la référence d’une classe au sein d’une autre classe est appelé composition. Lorsqu'un objet contient l'autre objet, si l'objet contenu ne peut exister sans l'existence d'un objet conteneur, alors on l'appelle composition. Autrement dit, on peut dire que la composition est le cas particulier de l'agrégation qui représente une relation plus forte entre deux objets. Exemple : Une classe contient des étudiants. Un étudiant ne peut pas exister sans classe. Il existe une composition entre la classe et les étudiants.


63) Quelle est la différence entre l'agrégation et la composition ?

L'agrégation représente la relation faible tandis que la composition représente la relation forte. Par exemple, le vélo a un indicateur (agrégation), mais le vélo a un moteur (composition).


64) Pourquoi Java ne prend-il pas en charge les pointeurs ?

Le pointeur est une variable qui fait référence à l'adresse mémoire. Ils ne sont pas utilisés en Java car ils sont dangereux (non sécurisés) et complexes à comprendre.


65) Qu’est-ce qui est super en Java ?

Le super Le mot-clé en Java est une variable de référence utilisée pour faire référence à l'objet de classe parent immédiat. Chaque fois que vous créez l'instance de la sous-classe, une instance de la classe parent est créée implicitement et référencée par une variable de super référence. Le super() est appelé implicitement dans le constructeur de classe par le compilateur s'il n'y a pas de super ou ceci.

 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(); } } 
Testez-le maintenant

Sortir:

 animal is created dog is created 
Plus de détails.

66) Comment le chaînage de constructeurs peut-il être effectué en utilisant le super mot-clé ?

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

Sortir

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

67) Quelles sont les principales utilisations du super mot-clé ?

Il existe les utilisations suivantes du super mot-clé.

  • super peut être utilisé pour faire référence à la variable d'instance de classe parent immédiate.
  • super peut être utilisé pour appeler la méthode de classe parent immédiate.
  • super() peut être utilisé pour invoquer le constructeur de classe parent immédiat.

68) Quelles sont les différences entre ce mot-clé et un super mot-clé ?

Il existe les différences suivantes entre ce mot-clé et le super mot-clé.

  • Le mot-clé super pointe toujours vers les contextes de classe parent alors que ce mot-clé pointe toujours vers le contexte de classe actuel.
  • Le super mot-clé est principalement utilisé pour initialiser les variables de classe de base dans le constructeur de classe dérivé, tandis que ce mot-clé est principalement utilisé pour différencier les variables locales et d'instance lorsqu'il est transmis dans le constructeur de classe.
  • Le super et this doivent être la première instruction à l’intérieur du constructeur, sinon le compilateur générera une erreur.

69) Quel est le résultat du programme Java suivant ?

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

Sortir

 Person class constructor called Employee class constructor called 

Explication

Le super() est implicitement invoqué par le compilateur si aucun super() ou this() n'est explicitement inclus dans le constructeur de classe dérivée. Par conséquent, dans ce cas, le constructeur de la classe Person est appelé en premier, puis le constructeur de la classe Employee est appelé.


70) Pouvez-vous utiliser this() et super() tous deux dans un constructeur ?

Non, car this() et super() doivent être la première instruction du constructeur de classe.

Exemple:

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

Sortir:

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

71) Qu’est-ce que le clonage d’objets ?

Le clonage d'objet est utilisé pour créer la copie exacte d'un objet. La méthode clone() de la classe Object permet de cloner un objet. Le java.lang.Cloneable L'interface doit être implémentée par la classe dont nous voulons créer le clone d'objet. Si nous n'implémentons pas l'interface Cloneable, la méthode clone() génère CloneNotSupportedException.

 protected Object clone() throws CloneNotSupportedException 
Plus de détails.

Core Java - Concepts de POO : questions d'entretien sur la surcharge de méthodes


72) Qu’est-ce que la surcharge de méthode ?

La surcharge de méthodes est la technique de polymorphisme qui nous permet de créer plusieurs méthodes avec le même nom mais une signature différente. Nous pouvons réaliser une surcharge de méthode de deux manières.

  • En changeant le nombre d'arguments
  • En modifiant le type de données des arguments

La surcharge de méthode augmente la lisibilité du programme. Une surcharge de méthode est effectuée pour comprendre rapidement le programme.

Plus de détails.

73) Pourquoi la surcharge de méthode n'est-elle pas possible en modifiant le type de retour en Java ?

En Java, la surcharge de méthode n'est pas possible en modifiant le type de retour du programme afin d'éviter toute ambiguïté.

 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 }} 
Testez-le maintenant

Sortir:

 Compile Time Error: method add(int, int) is already defined in class Adder 
Plus de détails.

74) Peut-on surcharger les méthodes en les rendant statiques ?

Non, nous ne pouvons pas surcharger les méthodes en leur appliquant simplement le mot-clé static (le nombre de paramètres et de types sont les mêmes). Considérez l'exemple suivant.

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

Sortir

 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) Pouvons-nous surcharger la méthode main() ?

Oui, nous pouvons avoir n'importe quel nombre de méthodes principales dans un programme Java en utilisant la surcharge de méthodes.

Plus de détails.

76) Qu'est-ce que la surcharge de méthode avec la promotion de type ?

La promotion par type est une surcharge de méthode, nous entendons qu'un type de données peut être promu implicitement à un autre si aucune correspondance exacte n'est trouvée.

Surcharge de méthode Java avec promotion de type

Comme indiqué dans le diagramme ci-dessus, l'octet peut être promu en short, int, long, float ou double. Le type de données court peut être promu en int, long, float ou double. Le type de données char peut être promu en int, long, float ou double, etc. Considérez l'exemple suivant.

 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); } } 
Testez-le maintenant

Sortir

 40 60 

77) Quel est le résultat du programme Java suivant ?

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

Sortir

 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 

Explication

Il existe deux méthodes définies avec le même nom, c'est-à-dire sum. La première méthode accepte le type entier et long tandis que la seconde méthode accepte le type long et entier. Les paramètres passés sont a = 20, b = 20. Nous ne pouvons pas dire quelle méthode sera appelée car il n'y a pas de différenciation claire mentionnée entre le littéral entier et le littéral long. C'est le cas de l'ambiguïté. Par conséquent, le compilateur générera une erreur.


Core Java - Concepts de POO : questions d'entretien de remplacement de méthode


78) Qu'est-ce que le remplacement de méthode :

Si une sous-classe fournit une implémentation spécifique d’une méthode déjà fournie par sa classe parent, on parle de remplacement de méthode. Il est utilisé pour le polymorphisme d'exécution et pour implémenter les méthodes d'interface.

Règles de remplacement de méthode

  • La méthode doit avoir le même nom que dans la classe parent.
  • La méthode doit avoir la même signature que dans la classe parent.
  • Deux classes doivent avoir une relation IS-A entre elles.
Plus de détails.


79) Pouvons-nous remplacer la méthode statique ?

Non, vous ne pouvez pas remplacer la méthode statique car elle fait partie de la classe et non de l'objet.


80) Pourquoi ne pouvons-nous pas remplacer la méthode statique ?

En effet, la méthode statique fait partie de la classe et elle est liée à la classe tandis que la méthode d'instance est liée à l'objet, et static obtient de la mémoire dans la zone de classe et l'instance obtient de la mémoire dans un tas.


81) Pouvons-nous remplacer la méthode surchargée ?

Oui.


82) Différence entre les méthodes de surcharge et de remplacement.

Surcharge de méthodeRemplacement de méthode
1) La surcharge de méthode augmente la lisibilité du programme.La substitution de méthode fournit l'implémentation spécifique de la méthode déjà fournie par sa superclasse.
2) Une surcharge de méthode se produit au sein de la classe.Le remplacement de méthode se produit dans deux classes qui ont une relation IS-A entre elles.
3) Dans ce cas, les paramètres doivent être différents.Dans ce cas, les paramètres doivent être les mêmes.

83) Pouvons-nous remplacer les méthodes privées ?

Non, nous ne pouvons pas remplacer les méthodes privées car la portée des méthodes privées est limitée à la classe et nous ne pouvons pas y accéder en dehors de la classe.


84) Pouvons-nous modifier la portée de la méthode remplacée dans la sous-classe ?

Oui, nous pouvons modifier la portée de la méthode remplacée dans la sous-classe. Cependant, il faut remarquer qu’on ne peut pas diminuer l’accessibilité de la méthode. Le point suivant doit être pris en compte lors de la modification de l'accessibilité de la méthode.

  • Le privé peut être modifié en protégé, public ou par défaut.
  • Le protégé peut être modifié en public ou par défaut.
  • La valeur par défaut peut être modifiée en public.
  • Le public restera toujours public.

85) Pouvons-nous modifier la clause throws de la méthode superclasse tout en la remplaçant dans la sous-classe ?

Oui, nous pouvons modifier la clause throws de la méthode superclasse tout en la remplaçant dans la sous-classe. Cependant, certaines règles doivent être suivies lors du remplacement en cas de gestion d'exceptions.

  • Si la méthode de la superclasse ne déclare pas d'exception, la méthode de sous-classe remplacée ne peut pas déclarer l'exception vérifiée, mais elle peut déclarer l'exception non vérifiée.
  • Si la méthode de superclasse déclare une exception, la méthode de sous-classe remplacée peut déclarer la même exception, une exception de sous-classe ou aucune exception, mais ne peut pas déclarer d'exception parent.

86) Quel est le résultat du programme Java suivant ?

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

Sortir

 Base class method called with integer a = 10 

Explication

La méthode() est surchargée dans la classe Base alors qu'elle est dérivée dans la classe Derived avec le type double comme paramètre. Dans l’appel de méthode, l’entier est transmis.

87) Pouvez-vous avoir des fonctions virtuelles en Java ?

Oui, toutes les fonctions en Java sont virtuelles par défaut.


88) Qu'est-ce que le type de retour covariant ?

Désormais, depuis Java5, il est possible de remplacer n'importe quelle méthode en modifiant le type de retour si le type de retour de la méthode de remplacement de sous-classe est de type sous-classe. Il est connu sous le nom de type de retour covariant. Le type de retour covariant spécifie que le type de retour peut varier dans le même sens que la sous-classe.

 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(); } } 
Testez-le maintenant
 Output: welcome to covariant return type 
Plus de détails.

89) Quel est le résultat du programme Java suivant ?

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

Sortir

 Derived method called ... 

Explication

La méthode de la classe Base, c'est-à-dire baseMethod(), est remplacée dans la classe Derived. Dans la classe Test, la variable de référence b (de type Classe Base) fait référence à l'instance de la classe Derived. Ici, le polymorphisme d'exécution est obtenu entre les classes Base et Derived. Au moment de la compilation, la présence de la méthode baseMethod est vérifiée dans la classe Base. Si elle est présente, le programme a été compilé, sinon l'erreur du compilateur sera affichée. Dans ce cas, baseMethod est présente dans la classe Base ; par conséquent, il est compilé avec succès. Cependant, au moment de l'exécution, il vérifie si la méthode baseMethod a été remplacée par la classe Derived. Si c'est le cas, la méthode de la classe Derived est appelée, sinon la méthode de la classe Base est appelée. Dans ce cas, la classe Derived remplace la baseMethod ; par conséquent, la méthode de classe Derived est appelée.


Core Java - Concepts POO : questions d'entretien sur le mot clé final


90) Quelle est la variable finale ?

En Java, la variable final est utilisée pour empêcher l'utilisateur de la mettre à jour. Si nous initialisons la variable finale, nous ne pouvons pas modifier sa valeur. En d’autres termes, nous pouvons dire que la variable finale, une fois affectée à une valeur, ne pourra plus jamais être modifiée par la suite. La variable finale qui n'est affectée à aucune valeur ne peut être affectée que via le constructeur de classe.

mot-clé final en 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 
Testez-le maintenant
 Output:Compile Time Error 
Plus de détails.

91) Quelle est la méthode finale ?

Si nous changeons une méthode en méthode finale, nous ne pouvons pas la remplacer. Plus de détails.

 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(); } } 
Testez-le maintenant
 Output:Compile Time Error 

92) Quel est le cours final ?

Si nous rendons une classe finale, nous ne pouvons en hériter dans aucune des sous-classes.

 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(); } } 
Testez-le maintenant
 Output:Compile Time Error 
Plus de détails.

93) Quelle est la dernière variable vide ?

Une variable finale, non initialisée au moment de la déclaration, est appelée variable finale vide. Nous ne pouvons pas initialiser directement la variable vide finale. Au lieu de cela, nous devons l'initialiser en utilisant le constructeur de classe. Ceci est utile dans le cas où l'utilisateur dispose de certaines données qui ne doivent pas être modifiées par d'autres, par exemple le numéro PAN. Prenons l'exemple suivant :

 class Student{ int id; String name; final String PAN_CARD_NUMBER; ... } 
Plus de détails.

94) Pouvons-nous initialiser la variable vide finale ?

Oui, s'il n'est pas statique, on peut l'initialiser dans le constructeur. S'il s'agit d'une variable finale vide et statique, elle ne peut être initialisée que dans le bloc statique. Plus de détails.


95) Pouvez-vous déclarer la méthode main comme finale ?

Oui, nous pouvons déclarer la méthode principale comme public static final void main(String[] args){}.


96) Quel est le résultat du programme Java suivant ?

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

Sortir

 20 

Explication

Puisque i est la variable finale vide. Il ne peut être initialisé qu'une seule fois. Nous l'avons initialisé à 20. C'est donc 20 qui sera imprimé.


97) Quel est le résultat du programme Java suivant ?

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

Sortir

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

Explication

La méthode getDetails() est finale ; il ne peut donc pas être remplacé dans la sous-classe.


98) Peut-on déclarer un constructeur comme final ?

Le constructeur ne peut jamais être déclaré final car il n’est jamais hérité. Les constructeurs ne sont pas des méthodes ordinaires ; par conséquent, cela n’a aucun sens de déclarer les constructeurs comme finaux. Cependant, si vous essayez de le faire, le compilateur générera une erreur.


99) Peut-on déclarer une interface comme finale ?

Non, nous ne pouvons pas déclarer une interface comme finale car l'interface doit être implémentée par une classe pour fournir sa définition. Par conséquent, cela n’a aucun sens de rendre une interface définitive. Cependant, si vous essayez de le faire, le compilateur affichera une erreur.


100) Quelle est la différence entre la méthode finale et la méthode abstraite ?

La principale différence entre la méthode finale et la méthode abstraite est que la méthode abstraite ne peut pas être finale car nous devons les remplacer dans la sous-classe pour donner sa définition.