La diferencia entre clases, objetos e instancias

¿Qué es una clase, un objeto y una instancia en Java?

Java (y cualquier otro lenguaje de progtwigción) se modela en términos de tipos y valores . En el nivel teórico, un valor es una representación de cierta cantidad de información, y un tipo es un conjunto de valores. Cuando decimos que el valor X es una instancia de tipo Y, simplemente estamos diciendo que X es un miembro del conjunto de valores que es del tipo Y.

Así que eso es lo que realmente significa el término “instancia”: describe una relación, no una cosa.

El sistema de tipos del lenguaje de progtwigción Java admite dos tipos de tipos, tipos primitivos y tipos de referencia . Los tipos de referencia se dividen en las 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 )

Esa es la vista teórica del tipo.

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 continuación, 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 tipo primitivo.

Una clase es un plano que usa 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 la misma cosa, pero la palabra ‘instancia’ indica la relación de un objeto con su clase.

Esto es fácil de entender si miras un ejemplo. Por ejemplo, supongamos que tiene una clase House . Tu propia casa es un objeto y es una instancia de la clase House . La casa de tu hermana es otro objeto (otra instancia de la House de la clase).

 // 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 concretas específicas que son objetos e instancias de la clase House .

Nota: Esto es exactamente lo mismo en Java que en todos los lenguajes de progtwigción orientados a objetos.

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 solo una plantilla.

Cuando se declara el objeto de la clase, se asigna memoria.

Me gusta la explicación de Jesper en términos sencillos

Al improvisar ejemplos de la respuesta de Jesper,

 class House { // blue print for House Objects } class Car { // blue print for Instances of Class Car } House myHouse = House new(); Car myCar = Car new(); 

myHouse y myCar son objetos

myHouse es una instancia de House (relaciona Object-myHouse con su Class-House) myCar es una instancia de Car

en breve

“myHouse es una instancia de Class House”, que es lo mismo que decir “myHouse es un objeto de tipo House”

La clase es Tipo de datos. Utiliza este tipo para crear objetos.

  • La instancia es Lógica pero el objeto es Físico significa que ocupa algo de memoria.

  • Podemos crear una instancia para la clase abstracta así como para la interfaz, pero no podemos crear una
    objeto para aquellos.

  • Object es instancia de clase y instancia significa representante de clase ie object.

  • Instancia se refiere a la referencia de un objeto.

  • Objeto en realidad está apuntando a la dirección de memoria de esa instancia.

  • No puede pasar instancia sobre las capas, pero puede pasar el objeto sobre las capas

  • No puede almacenar una instancia, pero puede almacenar un objeto

  • Un solo objeto puede tener más de una instancia.

  • Instance tendrá la definición de clase y la definición del objeto donde, como en el objeto, solo tendrá la definición del objeto.

Sintaxis del objeto:

  Classname var=new Classname(); 

Pero, por ejemplo, la creación devuelve solo un puntero que hace referencia a un objeto, la syntax es:

  Classname varname; 

En Java, los objetos se generan en la memoria del montón. Estos requieren referencia para ser apuntados y utilizados en nuestra aplicación. La referencia tiene la ubicación de memoria del objeto con el que podemos usar los objetos en nuestra aplicación. Una referencia en resumen no es más que un nombre de la variable que almacena la dirección del objeto instanciado en una ubicación de memoria.

Una instance es un término general para object . FYI, Object es una clase.

Por ejemplo,

 Class A{ } A ref = new A(); 

Para el fragmento de código anterior, ref es la referencia para un objeto de clase A generado en el montón.

Si tiene un progtwig que modela automóviles, tiene una clase para representar autos, entonces en el Código podría decir:

 Car someCar = new Car(); 

someCar es ahora una instancia de la clase Car. Si el progtwig se utiliza en un taller de reparación y el coche representa su automóvil en su sistema, entonces su automóvil es el objeto.

Entonces, Car es una clase que puede representar a cualquier auto del mundo real. CarCar es una instancia de la clase Car y SomeCare representa un objeto de la vida real (su auto).

sin embargo, la instancia y el objeto se usan muy a menudo de forma intercambiable cuando se trata de discutir la encoding

Cualquier clase de datos que su computadora almacena y procesa es en su representación más básica una fila de bits. La forma en que se interpretan esos bits se realiza a través de tipos de datos. Los tipos de datos pueden ser primitivos o complejos. Los tipos de datos primitivos son, por ejemplo, int o doble. Tienen una longitud específica y una forma específica de ser interpretado. En el caso de un entero, generalmente el primer bit se usa para el signo, los otros se usan para el valor.

Los tipos de datos complejos pueden ser combinaciones de tipos de datos primitivos y otros complejos y se llaman “Clase” en Java.

Puede definir el tipo de datos complejo NombrePersona que consta de dos cadenas llamadas nombre y apellido. Cada cadena en Java es otro tipo de datos complejo. Las cadenas a cambio se implementan (probablemente) utilizando el tipo de datos primitivos char para el cual Java sabe cuántos bits toman para almacenar y cómo interpretarlos.

Cuando crea una instancia de un tipo de datos, obtiene un objeto y sus computadoras reservan algo de memoria y recuerda su ubicación y el nombre de esa instancia. Una instancia de Nombre de persona en la memoria ocupará el espacio de las dos variables de Cadena más un poco más para la contabilidad. Un entero ocupa 32 bits en Java.

Los tipos de datos complejos pueden tener métodos asignados. Los métodos pueden realizar acciones en sus argumentos o en la instancia del tipo de datos al que llama este método. Si tiene dos instancias de PeopleName llamadas p1 y p2 y llama a un método p1.getFirstName (), generalmente devuelve el nombre de la primera persona, pero no la de la segunda persona.

El concepto detrás de clases y objetos es encapsular la lógica en una sola unidad de progtwigción. Las clases son los planos de los objetos que se crean.

Aquí un ejemplo de una clase que representa un automóvil:

 public class Car { int currentSpeed; String name; public void accelerate() { } public void park() { } public void printCurrentSpeed() { } } 

Puede crear instancias del objeto Car como esta:

 Car audi = new Car(); Car toyota = new Car(); 

Tomé el ejemplo de este tutorial

Clase

  • Tiene una existencia lógica, es decir, no se asigna espacio de memoria cuando se crea.

  • Es un conjunto de objetos.

  • Una clase puede considerarse como un plano para crear objetos.

    • Se crea utilizando la palabra clave class

    • Una clase define los métodos y los miembros de datos que poseerán los Objetos.


Objeto

  • Tiene existencia física, es decir, el espacio de memoria se asigna cuando se crea.

  • Es una instancia de una clase.

  • Un objeto es una entidad única que contiene miembros de datos y funciones de miembros juntos en el lenguaje OOP.

    • Se crea utilizando una palabra clave nueva

    • Un objeto especifica las implementaciones de los métodos y los valores que poseerán los miembros de los datos en la clase.

Honestamente, me siento más cómodo con las definiciones de blog de Alfred :

Objeto : los objetos del mundo real comparten 2 características principales, estado y comportamiento. Los humanos tienen estado (nombre, edad) y comportamiento (correr, dormir). El automóvil tiene estado (velocidad actual, marcha actual) y estado (aplicación de freno, cambio de marcha). Los objetos de software son conceptualmente similares a los objetos del mundo real: también consisten en el estado y el comportamiento relacionado. Un objeto almacena su estado en campos y expone su comportamiento a través de métodos.

Clase : es una “plantilla” / “plano” que se usa para crear objetos. Básicamente, una clase constará de campo, campo estático, método, método estático y constructor. El campo se usa para mantener el estado de la clase (p. Ej .: nombre del objeto del alumno). El método se usa para representar el comportamiento de la clase (p. Ej .: cómo un objeto de Estudiante va a ponerse de pie). Constructor se usa para crear una nueva instancia de la clase.

Instancia : una instancia es una copia única de una clase que representa un objeto. Cuando se crea una nueva instancia de una clase, la JVM asignará una sala de memoria para esa instancia de clase.

Dado el siguiente ejemplo:

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

Para el caso 1, hay dos instancias de la clase Persona, pero ambas instancias representan el mismo objeto.

Para el caso 2, hay dos instancias de la clase Persona, pero cada instancia representa un objeto diferente.

Entonces clase, objeto e instancia son cosas diferentes. El objeto y la instancia no son sinónimos, como se sugiere en la respuesta seleccionada como respuesta correcta.

La definición “Objeto es una instancia de una clase”, es conceptualmente incorrecta, pero correcta según la implementación. En realidad, las características orientadas a objetos se toman de la vida real, para enfocar la mente del progtwigdor de más a menos. En la vida real, las clases están diseñadas para administrar el objeto. Por ejemplo, nosotros los seres humanos tenemos una casta, religión, nacionalidad y mucho más. Estos elencos, religión, nacionalidad son las clases y no tienen existencia sin seres humanos. Pero en la implementación no hay existencia de objetos sin clases. Object- Object es una entidad discreta que tiene algún atributo bien definido. Aquí discreto significa algo que lo hace único de otro. El atributo bien definido tiene sentido en algún contexto. Clase- Clasificación de objetos que tienen algún comportamiento común u objetos de algún tipo común.

Si bien las respuestas anteriores son correctas, otra forma de pensar sobre Clases y Objetos sería utilizar ejemplos del mundo real: una clase llamada Animal podría contener objetos como Cat, Dog o Fish. Un objeto con un título de Biblia sería de clase, libro, etc. Las clases son generales, los objetos son específicos. Este ejemplo de pensamiento me ayudó cuando estaba aprendiendo Java.

La clase es una plantilla o tipo. Un objeto es una instancia de la clase.

Por ejemplo:

 public class Tweet { } Tweet newTweet = new Tweet(); 

Tweet es una clase y newTweet es un objeto de la clase.