Professional Documents
Culture Documents
diferente. En algunos tipos es posible almacenar simplemente el valor sin una conversin de tipos; lo que se denomina conversin automtica.
Esto slo es posible en Java si el compilador reconoce que la variable destino tiene la suficiente precisin para contener el valor origen, como almacenar un valor byte en una variable int. A esto se le llama ensanchamiento o promocin, dado que el tipo ms pequeo se ensancha o promociona al tipo compatible ms grande.
Si por el contrario, se desea asignar un valor de variable int a una variable byte se necesita realizar una conversin de tipos explcita. A esto se le llama estrechamiento, dado que se estrecha explcitamente el valor para que quepa en el destino. La conversin de un tipo se realiza poniendo delante un nombre de tipo entre parntesis, por ejemplo, (tipo) valor. El cdigo siguiente demuestra la conversin de tipos de int a byte. Si el valor del entero fuese mayor que el rango de un byte, se reducira al mdulo (resto de la divisin) del rango de byte.
int a = 100;
En Java es posible definir dos o ms mtodos dentro de la misma clase que compartan el mismo nombre pero las declaraciones de sus parmetros deben ser diferentes. A esto es a lo que se conoce como Sobrecarga de Mtodos. La Sobrecarga es uno de los procedimientos mediante el cual Java implementa el polimorfismo(en programacin orientada a objetos es la capacidad que tienen los objetos de una clase de responder al mismo mensaje o evento en funcin de los parmetros utilizados durante su invocacin)
Un mtodo sobrecargado se utiliza para reutilizar el nombre de un mtodo pero con diferentes argumentos (opcionalmente un tipo diferente de retorno). Las reglas para sobrecargar un mtodo son las siguientes: Los mtodos sobrecargados debe de cambiar la lista de argumentos. Pueden cambiar el tipo de retorno. Pueden cambiar el modificador de acceso. Pueden declarar nuevas o ms amplias excepciones. Un mtodo puede ser sobrecargado en la misma clase o en una subclase.
Lo que define qu mtodo es el que se va a llamar son los argumentos que se envan al mismo durante la llamada. Si se invoca a un mtodo con un String como argumento, se ejecutar el mtodo que tome un String como argumento, si se manda a llamar al mismo mtodo pero con un float como argumento, se ejecutar el mtodo que tome un float como argumento y as sucesivamente. Si se invoca a un mtodo con un argumento que no es definido en ninguna de las versiones sobrecargadas entonces el compilador arrojar un mensaje de error.
Reglas de la sobrecarga y sobreescritura de mtodos Ahora que hemos visto ambas formas de reescribir mtodos, revisemos las reglas y diferencias entre ambos tipos de reescritura: Argumentos: En un mtodo sobrecargado los argumentos deben de cambiar mientras que en un mtodo sobreescrito NO deben cambiar. El tipo de retorno: En un mtodo sobrecargado el tipo de retorno puede cambiar, en un mtodo sobreescrito NO puede cambiar, excepto por subtipos del tipo declarado originalmente.
Excepciones: En un mtodo sobrecargado las excepciones pueden cambiar, en un mtodo sobreescrito pueden reducirse o eliminarse pero NO deben de arrojarse excepciones nuevas o ms amplias. Acceso: En un mtodo sobrecargado puede cambiar, en un mtodo sobreescrito el acceso NO debe de hacerse ms restrictivo(puede ser menos restrictivo). Al invocar: En un mtodo sobrecargado los argumentos son los que determinan qu mtodo es el que se invocar, en un mtodo sobreescrito el tipo de objeto determina qu mtodo es elegido.
Ejemplo
Definir una clase con 3 mtodos sobrecargados, prueba(), diferencindose uno de otro por el nmero/tipo de parmetros y el mtodo main() llamar a cada uno de ellos
Sobrecarga de Operadores
Existen algunos operadores como el = que ya se encuentran sobrecargados de manera nativa. En el caso del = compara objetos en base a sus referencias.
Antes de ver la sobrecarga de operadores se ver la sobrecarga de funciones para entender el concepto.
SobreCarga de Mtodos
public class Sobrecarga { public void Numeros(int x, int y){ System.out.println("Mtodo que recibe enteros."); } public void Numeros(double x, double y){ System.out.println("Mtodo que recibe flotantes."); } public void Numeros(String cadena){ System.out.println("Mtodo que recibe una cadena: "+ cadena); } public static void main (String... args){ Sobrecarga s = new Sobrecarga(); int a = 1; int b = 2; s.Numeros(a,b); s.Numeros(3.2,5.7); s.Numeros("Monillo007"); } }
};