La diferencia entre clases, objetos e instancias
¿Qué es una clase, un objeto y una instancia en Java?
Una clase es un modelo que se utiliza para crear objetos . Un objeto es una instancia de una clase: es una "cosa" concreta que creaste usando una clase específica. Entonces, "objeto" e "instancia" son lo mismo, pero la palabra "instancia" indica la relación de un objeto con su clase.
Esto es fácil de entender si nos fijamos en un ejemplo. Por ejemplo, supongamos que tienes una clase House
. Tu propia casa es un objeto y es una instancia de clase House
. La casa de tu hermana es otro objeto (otra instancia de clase 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 clase House
describe el concepto de lo que es una casa, y hay casas específicas y concretas que son objetos e instancias de clase House
.
Nota: Esto es exactamente igual en Java que en todos los lenguajes de programación orientados a objetos.
Java (y cualquier otro lenguaje de programación) se modela en términos de tipos y valores . A nivel teórico, un valor es una representación de algún cuanto de información y un tipo es un conjunto de valores. Cuando decimos que el valor X es una instancia del tipo Y, simplemente estamos diciendo que X es miembro del conjunto de valores que es el tipo Y.
Eso es lo que realmente significa el término "instancia": describe una relación, no una cosa.
El sistema de tipos del lenguaje de programación Java admite dos tipos de tipos, tipos primitivos y tipos de referencia . Los tipos de referencia se dividen a su vez en clases y tipos de matriz . Un objeto Java es una instancia de un tipo de referencia.
Un objeto es una instancia de clase o una matriz. ( JLS 4.3.1 )
Ésa es la visión de la teoría de tipos.
En la práctica, la mayoría de los desarrolladores de Java tratan las palabras "instancia" y "objeto" como sinónimos. (Y eso me incluye a mí, entonces estoy tratando de explicar algo rápidamente). Y la mayoría de los desarrolladores usan la palabra "valor" en lugar de "instancia" para referirse a una instancia de un tipo primitivo.
Una clase es básicamente una definición y contiene el código del objeto. Un objeto es una instancia de una clase
por ejemplo si dices
String word = new String();
la clase es la clase String, que describe la palabra del objeto (instancia).
Cuando se declara una clase, no se asigna memoria, por lo que la clase es sólo una plantilla.
Cuando se declara el objeto de la clase, se asigna memoria.