Qu'est-ce qu'une classe, un objet et une instance en Java?
Java (et tout autre langage de programmation) est modélisé en termes de types et de valeurs . Au niveau théorique, une valeur est une représentation pour un quantum d’informations, et un type est un ensemble de valeurs. Lorsque nous disons que la valeur X est une instance de type Y, nous disons simplement que X est membre de l'ensemble de valeurs qui est le type Y.
Voilà donc ce que le terme "instance" signifie vraiment: il décrit une relation et non une chose.
Le système de types du langage de programmation Java prend en charge deux types de types, les types primitifs et types de référence . Les types de référence sont ensuite divisés en classes et types de tableaux . Un objet Java ) est une instance d'une référence type.
Un objet est une instance de classe ou un tableau. ( JLS 4.3.1 )
C'est la vue type théorique.
En pratique, la plupart des développeurs Java traitent les mots "instance" et "objet" comme des synonymes. (Et cela me comprend alors j'essaie d'expliquer quelque chose rapidement.) "valeur" plutôt que "instance" pour désigner une instance de type primitif.
Un classe est un plan que vous utilisez pour créer objets. Un objet est une instance d'une classe - c'est une "chose" concrète que vous avez créée à l'aide d'une classe spécifique. Donc, 'objet' et 'instance' sont la même chose, mais le mot 'instance' indique la relation d'un objet à sa classe.
C'est facile à comprendre si vous regardez un exemple. Par exemple, supposons que vous ayez une classe House
. Votre propre maison est un objet et est une instance de la classe House
. La maison de votre soeur est un autre objet (une autre instance de la classe House
).
// Class House describes what a house is
class House {
// ...
}
// You can use class House to create objects (instances of class House)
House myHouse = new House();
House sistersHouse = new House();
La classe House
décrit le concept de maison. Il existe des maisons spécifiques, concrètes, qui sont des objets et des instances de la classe House
.
Remarque: C’est exactement la même chose dans Java) que dans tous les langages de programmation orientés objet.
Une classe est fondamentalement une définition et contient le code de l'objet. Un objet est une instance d'une classe
par exemple si vous dites
String Word = new String();
la classe est la classe String, qui décrit l'objet (instance) Word.
Lorsqu'une classe est déclarée, aucune mémoire n'est allouée, donc la classe n'est qu'un modèle.
Lorsque l'objet de la classe est déclaré, la mémoire est allouée.
J'aime l'explication de Jesper en termes simples
En improvisant des exemples de la réponse de Jesper,
class House {
// blue print for House Objects
}
class Car {
// blue print for Instances of Class Car
}
House myHouse = new House();
Car myCar = new Car();
myHouse et myCar sont des objets
myHouse est une instance de House (relie Object-myHouse à sa classe de classe) myCar est une instance de Car
en bref
"myHouse est une instance de Classe Maison", ce qui revient à dire "myHouse est un Objet de type Maison "
La classe est un type de données, vous utilisez ce type pour créer un objet.
L'instance est logique mais l'objet est physique signifie que la mémoire est occupée.
Nous pouvons créer une instance pour une classe abstraite aussi bien que pour une interface, mais nous ne pouvons pas créer de
objet pour ceux-là.
L'objet est une instance de la classe et une instance signifie représentant de la classe i.e objet.
L'instance fait référence à la référence d'un objet.
L'objet pointe en fait sur l'adresse mémoire de cette instance.
Vous ne pouvez pas passer d’instance sur les calques, mais vous pouvez passer l’objet sur les calques.
Vous ne pouvez pas stocker une instance, mais vous pouvez stocker un objet
Un seul objet peut avoir plus d'une instance.
L'instance aura à la fois la définition de la classe et la définition de l'objet, alors qu'en tant qu'objet, elle n'aura que la définition de l'objet.
Syntaxe de l'objet:
Classname var=new Classname();
Mais pour la création, par exemple, elle ne renvoie qu'un pointeur faisant référence à un objet. La syntaxe est la suivante:
Classname varname;
En Java, les objets sont générés sur la mémoire de tas. Ceux-ci nécessitent une référence pour être pointés et utilisés dans notre application. La référence a l'emplacement mémoire de l'objet avec lequel nous pouvons utiliser les objets dans notre application. En bref, une référence n'est rien d'autre qu'un nom de variable qui stocke l'adresse de l'objet instancié sur un emplacement de mémoire.
Un instance
est un terme général pour object
. Pour votre information, Object
est une classe.
Par exemple,
Class A{
}
A ref = new A();
Pour l'extrait de code ci-dessus, ref est la référence d'un objet de classe A généré sur le tas.
Le concept derrière les classes et les objets consiste à encapsuler la logique dans une seule unité de programmation. Les classes sont les modèles pour lesquels des objets sont créés.
Voici un exemple de classe représentant une voiture:
public class Car {
int currentSpeed;
String name;
public void accelerate() {
}
public void park() {
}
public void printCurrentSpeed() {
}
}
Vous pouvez créer des instances de l'objet comme ceci:
Car audi = new Car();
Car toyota = new Car();
J'ai pris l'exemple de ce tutoriel
Honnêtement, je me sens plus à l'aise avec Alfred blog définitions:
Object : les objets du monde réel partagent 2 caractéristiques principales, leur état et leur comportement. Les humains ont un état (nom, âge) et un comportement (courir, dormir). Etat de la voiture (vitesse actuelle, rapport actuel) et comportement (freinage, changement de rapport). Les objets logiciels sont conceptuellement similaires aux objets du monde réel: ils consistent également en un état et un comportement associé. Un objet stocke son état dans des champs et expose son comportement à l'aide de méthodes.
Classe : est un "modèle"/"plan" utilisé pour créer des objets. Fondamentalement, une classe sera composée d'un champ, d'un champ statique, d'une méthode, d'une méthode statique et d'un constructeur. Le champ est utilisé pour contenir l'état de la classe (par exemple: nom de l'objet Student). La méthode est utilisée pour représenter le comportement de la classe (par exemple, comment un objet Student va se tenir debout). Le constructeur est utilisé pour créer une nouvelle instance de la classe.
Instance : une instance est une copie unique d'une classe représentant un objet. Lorsqu'une nouvelle instance d'une classe est créée, la machine virtuelle alloue une salle de mémoire pour cette instance de classe.
Étant donné l'exemple suivant:
public class Person {
private int id;
private String name;
private int age;
public Person (int id, String name, int age) {
this.id = id;
this.name = name;
this.age = age;
}
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + id;
return result;
}
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Person other = (Person) obj;
if (id != other.id)
return false;
return true;
}
public static void main(String[] args) {
//case 1
Person p1 = new Person(1, "Carlos", 20);
Person p2 = new Person(1, "Carlos", 20);
//case 2
Person p3 = new Person(2, "John", 15);
Person p4 = new Person(3, "Mary", 17);
}
}
Dans le cas 1, il existe deux instances de la classe Person, mais les deux instances représentent le même objet.
Dans le cas 2, il existe deux instances de la classe Person, mais chaque instance représente un objet différent.
Donc, classe, objet et instance sont des choses différentes. Objet et instance ne sont pas des synonymes, comme le suggère la réponse choisie comme bonne réponse.
Tout type de données stockées et traitées par votre ordinateur constitue, dans sa représentation la plus élémentaire, une rangée de bits. La façon dont ces bits sont interprétés se fait à travers des types de données. Les types de données peuvent être primitifs ou complexes. Les types de données primitifs sont, par exemple, int ou double. Ils ont une longueur et une manière spécifiques d'être interprétés. Dans le cas d'un entier, le premier bit est généralement utilisé pour le signe, les autres sont utilisés pour la valeur.
Les types de données complexes peuvent être des combinaisons de types de données complexes primitifs et autres et sont appelés "Class" en Java.
Vous pouvez définir le type de données complexe PeopleName constitué de deux chaînes appelées prénom et nom. Chaque chaîne dans Java est un autre type de données complexe. Les chaînes en retour sont (probablement) implémentées à l'aide du type de données primitif char pour lequel Java sait combien de bits elles prendre pour stocker et comment les interpréter.
Lorsque vous créez une instance d'un type de données, vous obtenez un objet. Votre ordinateur lui réserve de la mémoire, se souvient de son emplacement et du nom de cette instance. Une instance de PeopleName en mémoire occupera l’espace des deux variables String plus un peu plus pour la comptabilité. Un entier prend 32 bits en Java.
Les méthodes peuvent être affectées à des types de données complexes. Les méthodes peuvent effectuer des actions sur leurs arguments ou sur l'instance du type de données à partir duquel vous appelez cette méthode. Si vous avez deux instances de PeopleName appelées p1 et p2 et que vous appelez une méthode p1.getFirstName (), elle renvoie généralement le prénom de la première personne, mais pas celui de la deuxième personne.
Si vous avez un programme qui modélise des voitures, vous avez une classe pour représenter les voitures. Dans Code, vous pouvez donc dire:
Car someCar = new Car();
someCar est maintenant une instance de la classe Car. Si le programme est utilisé dans un atelier de réparation et que someCar représente votre voiture dans leur système, votre voiture est alors son objet.
Donc, la voiture est une classe qui peut représenter n'importe quelle voiture du monde réel. SomeCar est un exemple de la classe voiture et someCare représente n objet réel (votre voiture).
cependant, l'instance et l'objet sont très souvent utilisés de manière interchangeable lorsqu'il s'agit de discuter du codage
Il a une existence logique, c’est-à-dire qu’aucun espace mémoire n’est alloué lors de sa création.
C'est un ensemble d'objets.
Une classe peut être considérée comme un plan pour créer des objets.
Il est créé en utilisant le mot-clé de classe
Une classe définit les méthodes et les membres de données qui seront possédés par Objects.
Il a une existence physique, c’est-à-dire que l’espace mémoire est alloué lors de sa création.
C'est une instance d'une classe.
Un objet est une entité unique qui contient des données membres et des fonctions membres dans la langue OOP.
Il est créé en utilisant un nouveau mot clé
Un objet spécifie les implémentations des méthodes et les valeurs que posséderont les données membres de la classe.
Classe: Structure
Object: Manifestation physique
Instance: chaque objet créé à partir de la classe
Référence: Adresse de l'objet
Une classe est un plan nécessaire à la création d'un objet (= instance).
La différence entre un objet et une instance est qu'un objet est une chose et une instance est une relation.
En d'autres termes, instance décrit la relation d'un objet à la classe à partir de laquelle l'objet a été créé.