2.7 Tipos de return válidos - ajpaez/OCA GitHub Wiki
(OCA Objectives 2.2, 2.5, 6.1, and 6.3)
En este apartado se cubrirán dos aspectos de los tipos de return:
- Lo que se puede declarar como un tipo de return
- Lo que se puede devolver como un valor
Declaraciones de tipos de return
En esta sección se verá lo que esta permitido declarar como un tipo devuelto, que depende principalmente de si esta siendo sobreescrito, sobrecargado o declarando un método nuevo.
Tipos de return en métodos sobrecargados
Recuerda que sobrecargar un método no es mas que rehusar su nombre. Los métodos sobrecargados son métodos complemente diferentes de cualquiera de los otros métodos con el mismo nombre. Así que si se hereda un método y este se sobrecarga en la subclase, esta permitido declarar cualquier tipo de retorno distinto. Lo que no puede hacer es cambiar solo el tipo de retorno. Para sobrecargar un método es necesario cambiar la lista de argumentos.
Sobreescritura y tipos de return, y covariant returns
Cuando una subclase quiere cambiar la implementación de un método, la subclase debe definir (sobreescribir) un método que coincida con el heredado exactamente. Ademas, se le permite cambiar el tipo de retorno siempre y cuando el nuevo tipo de retorno sea un subtipo del retorno del método que hereda (superclase). Ejemplo de covariant returns:
class Alpha {
Alpha doStuff(char c) {
return new Alpha();
}
}
class Beta extends Alpha {
Beta doStuff(char c) { // legal override in Java 1.5
return new Beta();
}
}
NOTA: los métodos sobrecargados pueden cambiar el tipo de return, pero los sobreescritos solo pueden hacerlo respetando de la covariant.
Devolviendo un valor
Seis son las reglas para devolver un valor:
- Puedes devolver null en un método que tenga una referencia de objeto como valor devuelto
- Se permite devolver arrays
- Se permite devolver un tipo primitivo o cualquier tipo de dato que pueda ser convertido implícitamente.
public int foo() {
char c = 'c';
return c; // char is compatible with int
}
- Se permite devolver un tipo primitivo o cualquier tipo de dato que pueda ser convertido explicita mente.
public int foo () {
float f = 32.5f;
return (int) f;
}
- No hay que devolver nada en un método con tipo de return void ( Aunque se puede escribir return; )
- En un método que devuelva una referencia de objeto, puedes devolver cualquier tipo que puede ser casteado de forma implícita al declarado por el método. Es decir, si el tipo devuelto pasa el test IS-A con el declarado por el método, es un tipo valido de return.