Devolver un valor desde un método (Los tutoriales Java™ > El lenguaje Java > Clases y objetos)
Ruta: El lenguaje Java
Lección: Clases y objetos
Section: More on Classes
Devolver un valor desde un método
Página inicial > El lenguaje Java > Clases y objetos
Devolver un valor desde un método
Un método vuelve al código que lo invocó cuando lo que ocurra primero.

El tipo de retorno de un método se indica en su declaración de método. Dentro del cuerpo del método se usa la sentencia return para devolver el valor.

Los métodos declarados como void no devuelven ningún valor. No es necesario que contengan una sentencia return, pero podrían hacerlo. En tal caso se puede usar la sentencia return para salirse de un bloque de control de flujo y salir del método. Se utiliza simplemente así:

 return;
 
Si intenta devolver un valor desde un método declarado como void obtendrá un error de compilación.

Todo método que no se declare como void debe contener una sentencia return con su correspondiente valor de retorno de este modo:

 return valorDeRetorno;
 
El tipo de dato del valor de retorno se debe corresponder con el tipo de retorno del método; no se puede devolver un entero desde un método cuyo tipo de retorno está declarado como boolean.

El método getArea() en la clase Rectangle Rectangle que se comentó en las secciones acerca de los objetos devuelve un entero:

    // un método para calcular el área de un rectángulo
    public int getArea() {
	return width * height;
    }
Este método devuelve el entero que resulta de evaluar la expresión width*height.

El método getArea devuelve un tipo primitivo. Un método también puede devolver un tipo de referencia. Por ejemplo, en un programa para manipular objetos Bicycle podríamos tener un método como este:

public Bicycle verElMasRapido(Bicycle miBici, Bicycle tuBici, Environment env) {
  Bicycle masRapida;
  // código para calcular qué bici es la más rápida, dadas
  // las marchas, cadencias y  
  // el entorno (terreno y viento) de cada bici
  return masRapida;
}

Devolver una clase o interfaz

Si esta sección le confunde, sáltela y vuelva después de terminar la lección acerca de interfaces y herencia.

Cuando un método usa un nombre de clase como su tipo de retorno, como hace verElMasRapido, la clase del tipo del objeto devuelto debe ser una subclase de, o la misma clase que el tipo de retorno. Supongamos que tiene una jerarquía de clases en la que ImaginaryNumber es una subclase de java.lang.Number que, a su vez es una subclase de Object, como se indica en la siguiente figura.

La jerarquía de clases de ImaginaryNumber

La jerarquía de clases de ImaginaryNumber

Ahora supongamos que tiene un método que declara que devuelve un Number:
public Number returnANumber() {
    ...
}
El método returnANumber puede devolver un ImaginaryNumber pero no un Object. ImaginaryNumber es un Number porque es una subclase de Number. Sin embargo, un Object no es necesariamente un Number, podría ser un String u otro tipo.

Puede sobrescribir un método y definir que devuelva una subclase del método original, así:

public ImaginaryNumber returnANumber() {
    ...
}
Esta técnica, llamada tipo de retorno covariante, significa que se permite que el tipo de retorno varíe en la misma dirección que la subclase.

Nota: También puede usar nombres de interfaz como tipo de retorno. En este caso el objeto devuelto debe implementar la interfaz indicada.
Página anterior: Más acerca de clases
Página siguiente: Uso de la palabra clave this

  ATENCIÓN: La traducción de esta documentación es un esfuerzo personal y voluntario. NO es un documento oficial del propietario de la tecnología Java, Oracle, ni está patrocinado por esta empresa.

Los documentos originales y actualizados (en inglés) están disponibles en: http://docs.oracle.com/javase/tutorial/. La versión disponible en este sitio es la publicada en Marzo de 2008 (más información en: "What's new and What's Old? The History of the Tutorial").

Dirige cualquier comentario, petición, felicitación, etc. a tutorialesjava@codexion.com.

Si quieres ayudar a mantener en funcionamiento esta web, colaborar con la traducción de estos documentos o necesitas que se traduzca algún capítulo en concreto puedes invitarme a un café: