Siendo nuevo en Java, estoy confundido entre los conceptos de clase y tipo . Por ejemplo, ¿el objeto debe "Hello World!"
pertenecer al tipo String
o clase String
? ¿O quizás ambos?
Siendo nuevo en Java, estoy confundido entre los conceptos de clase y tipo . Por ejemplo, ¿el objeto debe "Hello World!"
pertenecer al tipo String
o clase String
? ¿O quizás ambos?
Respuestas:
Una clase es un tipo. Una interfaz es un tipo. Un primitivo es un tipo. Una matriz es un tipo.
Por lo tanto, cada tipo es también una clase (incluida una constante de enumeración), una interfaz, una primitiva o una matriz.
Hay dos categorías distintas de tipos: tipos primitivos y tipos de referencia:
Object
. Los tipos de referencia son tipos de clase (incluidos tipos de enumeración), tipos de interfaz y tipos de matriz.Cada dato tiene un tipo que define su estructura, es decir, cuánta memoria ocupa, cómo está distribuido y, lo que es más importante, cómo puede interactuar con él.
Ejemplos de tipos primitivos:
int
float
char
boolean
Ejemplos de tipos de clases:
Ejemplos de tipos de interfaz:
Ejemplos de tipos de matrices:
int[]
String[]
Integer[][][]
Básicamente, cualquier cosa a la que pueda referirse como variable tiene un tipo, y las clases son una especie de tipo.
Más información aquí: http://docs.oracle.com/javase/specs/jls/se8/html/jls-4.html
TLDR : la clase es uno de los tipos en Java.
Nota: para comprender completamente la respuesta, debe tener una pequeña idea sobre los genéricos en Java.
Para comprender la diferencia, primero comprendamos qué es un tipo en Java.
Según JLS SE 10 ,
Hay dos tipos de tipos en el lenguaje de programación Java: tipos primitivos ( §4.2 ) y tipos de referencia (§4.3).
¿Qué es el tipo primitivo?
a) Los tipos integrales son byte, short, int y long , cuyos valores son enteros en complemento a dos con signo de 8 bits, 16 bits, 32 bits y 64 bits, respectivamente, y char, cuyos valores son de 16 bits enteros sin signo que representan unidades de código UTF-16 (§3.1).
b) Los tipos de coma flotante son float , cuyos valores incluyen los números de coma flotante IEEE 754 de 32 bits, y double , cuyos valores incluyen los números de coma flotante IEEE 754 de 64 bits.
c) El tipo booleano tiene exactamente dos valores: verdadero y falso.
Ahora, pasemos a lo que es el tipo de referencia.
Hay cuatro tipos de tipos de referencia: tipos de clase ( §8.1 ), tipos de interfaz ( §9.1 ), variables de tipo ( §4.4 ) y tipos de matriz ( §10.1 ).
Discutamos uno por uno.
Si ve cómo en JLS, Class se define así:
Una declaración de clase especifica un nuevo tipo de referencia con nombre.
Hay dos tipos de declaraciones de clase: declaraciones de clase normales y declaraciones de enumeración .
ClassDeclaration:
NormalClassDeclaration
EnumDeclaration
NormalClassDeclaration:
{ClassModifier} class TypeIdentifier [TypeParameters] [Superclass] [Superinterfaces] ClassBody
Verá eso [TypeParameters]
, esto muestra que el tipo de clase también incluye esas clases genéricas.
class Example<T>{
}
El tipo de clase se llamará Example
En resumen, un tipo de clase cubre nuestras enumeraciones, nuestras clases regulares (no genéricas) como String
etc. y nuestras clases genéricas también.
Del mismo modo, espero que los tipos de interfaz y matriz también sean claros. Por tipo de matriz queremos decir como int[]
, String[]
etc.
Vayamos a la última parte: variables de tipo. Qué son ?
Una variable de tipo es un identificador no calificado que se utiliza como tipo en cuerpos de clase, interfaz, método y constructor.
Entendamos por el ejemplo en el JLS debajo.
class Test {
<T extends C & I> void test(T t) {
t.mI(); // OK
t.mCPublic(); // OK
t.mCProtected(); // OK
t.mCPackage(); // OK
}
}
Verá que su objeto en el parámetro de método es de tipo T
. Sí, esta T
es una variable de tipo y se puede utilizar como referencia. Sí lo es. (No pude entender este extraño ejemplo: aprenda qué es el método genérico en Java)
Esto completa la respuesta.
"Tipo" es la categoría más inclusiva. Las variables en Java pueden tener tres tipos de tipos: los 8 tipos "primitivos" como int y float, interfaces y clases. Los valores (a diferencia de las variables) pueden ser instancias primitivas o de clase.
"Tipo" define "qué tipo de datos son"
Ej: "hola mundo" es una cadena -> "hola mundo" es un tipo de cadena (la cadena no es un dato preliminar a diferencia de int ... así que podemos decir que "hola mundo" es un tipo de clase de cadena)
10 es un int -> 10 es un tipo de datos entero.