You are on page 1of 20

Hay situaciones en las cuales se tiene un valor de un tipo dado y se desea almacenar ese valor en una variable de un tipo

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.

Ejemplo de una clase con un mtodo sobrecargado:


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"); } } Al ejecutar el cdigo anterior obtendremos lo siguiente: Mtodo que recibe enteros. Mtodo que recibe flotantes. Mtodo que recibe una cadena: Monillo007

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 en C++


La sobrecarga de operadores es una forma ms de polimorfismo. La sobrecarga de operadores permite definir para una clase un mtodo especial, por ejemplo la clase string sobre carga el operador + para concatenar cadenas.

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 operadores en Java


Java no soporta sobrecarga de operadores. Los nicos casos de operadores sobrecargados con una operacin especial (definido por el sistema no por los programadores) son el operador = para copia, para == igualdad de referencias y + para la concatenacin de cadenas o elementos.

Conversin de tipos en Java.


class ConversionTipos { public static void main(String args[]) { byte b; int i = 257; double d = 323.142; double d2; float f = 5.65f; char c = 'c'; short s = 1024; b = (byte) i;//efecto: se devuelve (i modulo 256), rango de byte. System.out.println(b); i = (int) d;//efecto: truncamiento de la parte decimal. System.out.println(i); b = (byte)d;//efecto: truncamiento y luego (result_truncado modulo 256) System.out.println(b); i = (int)f;//efecto: truncamiento de la parte decimal System.out.println(i); i = c;//correcto por ser int, pero un byte o short necesitara un cast explcito. System.out.println(i); f = c; d = c;//correcto. i = b * c;//efecto: la operacin promociona a int. System.out.println(i); d2 = (f*b) + (i/c) - (d*s); /* efecto: el resultado de la promocin de todas las expresiones es un double: (f*b) promociona a float, (i/c) promociona a int y (d*s) promociona a double. Luego, float + int - double promociona a double. */ System.out.println(d2); } }

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

Sobrecarga De Operadores (C++)


La sobrecarga de un operador suma se hace de la siguiente manera class ComplejoC { public: // Permite sumar un ComplejoC con un double ComplejoC operator + (double sumando); // Permite sumar un ComplejoC con un array ComplejoC operator + (const double sumando[]); // Permite sumar dos ComplejoC entre s. ComplejoC operator + (const ComplejoC &sumando);

};

You might also like