SlideShare una empresa de Scribd logo
1 de 5
Descargar para leer sin conexión
Sobrecarga de Constructores.
Además de la sobrecarga de métodos normales, también puede sobrecargar métodos de
constructor. De hecho, para la mayoría las clases reales que cree, constructores sobrecargados será
la norma, no la excepción. Para entender por qué, volvamos a la clase de cuadro desarrollada en el
capítulo anterior. Lo que sigue es la última versión del cuadro:

class Box {
double width;
double height;
double depth;
// This is the constructor for Box.
Box(double w, double h, double d) {
width = w;
height = h;
depth = d;
}
// compute and return volume
double volume() {
return width * height * depth;
}
}
Como se puede ver, el Box( ) constructor requiere tres parámetros. Esto significa que todas las
declaraciones de un cuadro de objetos deben pasar tres argumentos para el constructor de box ().
Por ejemplo, la siguiente declaración es actualmente no válida:

Box ob = new Box();
Box( ) requiere tres argumentos, es un error llamarlo sin ellos. Esto plantea algunas cuestiones
importantes. ¿Qué sucede si simplemente quería un cuadro y no cuidado (o saber) lo que fueron sus
dimensiones iniciales? O, ¿qué sucede si desea poder inicializar un cubo mediante la especificación
de un único valor que se utilizaría para las tres dimensiones? Como la clase de cuadro actualmente
está escrita, estas otras opciones no están disponibles para usted. Afortunadamente, la solución a
estos problemas es muy fácil: simplemente de sobrecarga del constructor de cuadro para que maneja
las situaciones que se acaba de describir. Aquí es un programa que contiene una versión mejorada
del cuadro que hace exactamente eso:

/* Here, Box defines three constructors to initialize
the dimensions of a box various ways.
*/
class Box {
double width;
double height;
double depth;
// constructor used when all dimensions specified
Box(double w, double h, double d) {
width = w;
height = h;
depth = d;
}
// constructor used when no dimensions specified
Box() {
width = -1; // use -1 to indicate
height = -1; // an uninitialized
depth = -1; // box
}
// constructor used when cube is created
Box(double len) {
width = height = depth = len;
}
// compute and return volume
double volume() {
return width * height * depth;
}
}
class OverloadCons {
public static void main(String args[]) {
// create boxes using the various constructors
Box mybox1 = new Box(10, 20, 15);
Box mybox2 = new Box();
Box mycube = new Box(7);
double vol;
// get volume of first box
vol = mybox1.volume();
System.out.println("Volume of mybox1 is " + vol);
// get volume of second box
vol = mybox2.volume();
System.out.println("Volume of mybox2 is " + vol);
// get volume of cube
vol = mycube.volume();
System.out.println("Volume of mycube is " + vol);
}
}

Aquí se muestra la salida producida por este programa:

Volume of mybox1 is 3000.0
Volume of mybox2 is -1.0
Volume of mycube is 343.0
Como puede ver, se llama al constructor sobrecargado adecuado en función de los parámetros
especificados cuando se ejecuta en nuevo.

Uso de objetos como parámetros
Hasta ahora hemos sólo se ha utilizando tipos simples como parámetros a los métodos. Sin embargo,
es correcto y común para pasar objetos a métodos. Por ejemplo, considere el siguiente programa
corto:

// Objects may be passed to methods.
class Test {
int a, b;
Test(int i, int j) {
a = i;
b = j;
}
// return true if o is equal to the invoking object
boolean equals(Test o) {
if(o.a == a && o.b == b) return true;
else return false;
}
}
class PassOb {
public static void main(String args[]) {
Test ob1 = new Test(100, 22);
Test ob2 = new Test(100, 22);
Test ob3 = new Test(-1, -1);
System.out.println("ob1 == ob2: " + ob1.equals(ob2));
System.out.println("ob1 == ob3: " + ob1.equals(ob3));
}
}

Este programa genera el siguiente resultado:

ob1 == ob2: true
ob1 == ob3: false
Como puede ver, el método equals de () dentro de prueba compara dos objetos para la igualdad y
devuelve el resultado. Es decir, compara el objeto invocando con uno que se pasa. Si contienen los
mismos valores, el método devuelve true. De lo contrario, devuelve false. Observe que el parámetro
o es igual a () especifica la prueba como su tipo. Aunque la prueba es un tipo de clase creado por el
programa, se utiliza en sólo del mismo modo que los tipos integrados de Java. Uno de los usos más
comunes de los parámetros del objeto implica constructores. Frecuentemente se desea construir un
nuevo objeto, por lo que inicialmente es el mismo que algún objeto existente. Para ello, debe definir
un constructor que toma un objeto de su clase como un parámetro. Por ejemplo, la siguiente versión
del cuadro de permite que un objeto inicializar otro:

// Here, Box allows one object to initialize another.
class Box {
double width;
double height;
double depth;
// construct clone of an object
Box(Box ob) { // pass object to constructor
width = ob.width;
height = ob.height;
depth = ob.depth;
}
// constructor used when all dimensions specified
Box(double w, double h, double d) {
width = w;
height = h;
depth = d;
}
// constructor used when no dimensions specified
Box() {
width = -1; // use -1 to indicate
height = -1; // an uninitialized
depth = -1; // box
}
// constructor used when cube is created
Box(double len) {
width = height = depth = len;
}
// compute and return volume
double volume() {
return width * height * depth;
}
}
class OverloadCons2 {
public static void main(String args[]) {
// create boxes using the various constructors
Box mybox1 = new Box(10, 20, 15);
Box mybox2 = new Box();
Box mycube = new Box(7);
Box myclone = new Box(mybox1);
double vol;
// get volume of first box
vol = mybox1.volume();
System.out.println("Volume of mybox1 is " + vol);
// get volume of second box
vol = mybox2.volume();
System.out.println("Volume of mybox2 is " + vol);
// get volume of cube
vol = mycube.volume();
System.out.println("Volume of cube is " + vol);
// get volume of clone
vol = myclone.volume();
System.out.println("Volume of clone is " + vol);
}
}
Como puede ver cuando comience a crear sus propias clases, proporcionando muchas formas de
métodos de constructor normalmente es necesario para permitir que los objetos que se construirán
en una manera conveniente y eficiente.

Más contenido relacionado

Destacado

Per què fa calor i fred(1)
Per què fa calor i fred(1)Per què fa calor i fred(1)
Per què fa calor i fred(1)Sonia Carneros
 
Hots v11 1308
Hots v11 1308Hots v11 1308
Hots v11 1308cik dah
 
Hots v09(june)
Hots v09(june)Hots v09(june)
Hots v09(june)cik dah
 
Presentacion mami
Presentacion mamiPresentacion mami
Presentacion mamiEndry Abreu
 
Laringotraqueobronquitis angel garcia 5ev1
Laringotraqueobronquitis angel garcia 5ev1Laringotraqueobronquitis angel garcia 5ev1
Laringotraqueobronquitis angel garcia 5ev1Giovane Diaz
 
Herramientas de las TICs
Herramientas de las TICsHerramientas de las TICs
Herramientas de las TICsjmv3111
 
Yengo presentation thailand no vid revised 3 cn
Yengo presentation thailand no vid revised 3 cnYengo presentation thailand no vid revised 3 cn
Yengo presentation thailand no vid revised 3 cnAlexey Zhokhov
 
Bases de calculo camiara
Bases de calculo camiaraBases de calculo camiara
Bases de calculo camiaraEmelyquispe
 
Resultats cursa de s'è 2013 alaró lloseta-binissalem-alaró
Resultats cursa de s'è 2013 alaró lloseta-binissalem-alaróResultats cursa de s'è 2013 alaró lloseta-binissalem-alaró
Resultats cursa de s'è 2013 alaró lloseta-binissalem-alaró5acpblanquerna
 
Hots v08 (may)
Hots v08 (may)Hots v08 (may)
Hots v08 (may)cik dah
 
I think bunting 2014 (bm)ol
I think bunting 2014 (bm)olI think bunting 2014 (bm)ol
I think bunting 2014 (bm)olcik dah
 
Penilaian prestari-kerja
Penilaian prestari-kerjaPenilaian prestari-kerja
Penilaian prestari-kerjasujiman ae
 
Reanimacion neonatal
Reanimacion neonatalReanimacion neonatal
Reanimacion neonatalGiovane Diaz
 
Welfare: Melbourne Mercer Global pension Index
Welfare: Melbourne Mercer Global pension IndexWelfare: Melbourne Mercer Global pension Index
Welfare: Melbourne Mercer Global pension IndexAssociazione Previnforma
 
Новорічне свято в старшій групі ДНЗ № 28 м. Мукачево
Новорічне свято в старшій групі ДНЗ № 28 м. МукачевоНоворічне свято в старшій групі ДНЗ № 28 м. Мукачево
Новорічне свято в старшій групі ДНЗ № 28 м. МукачевоНаталія Бабич
 
Sindromes de malabsorción
Sindromes de malabsorciónSindromes de malabsorción
Sindromes de malabsorciónGiovane Diaz
 

Destacado (20)

Per què fa calor i fred(1)
Per què fa calor i fred(1)Per què fa calor i fred(1)
Per què fa calor i fred(1)
 
Hots v11 1308
Hots v11 1308Hots v11 1308
Hots v11 1308
 
Hots v09(june)
Hots v09(june)Hots v09(june)
Hots v09(june)
 
Presentacion mami
Presentacion mamiPresentacion mami
Presentacion mami
 
Laringotraqueobronquitis angel garcia 5ev1
Laringotraqueobronquitis angel garcia 5ev1Laringotraqueobronquitis angel garcia 5ev1
Laringotraqueobronquitis angel garcia 5ev1
 
Emblems
EmblemsEmblems
Emblems
 
Herramientas de las TICs
Herramientas de las TICsHerramientas de las TICs
Herramientas de las TICs
 
Presentació Austràlia
Presentació AustràliaPresentació Austràlia
Presentació Austràlia
 
A tu infant 2
A tu infant 2A tu infant 2
A tu infant 2
 
Yengo presentation thailand no vid revised 3 cn
Yengo presentation thailand no vid revised 3 cnYengo presentation thailand no vid revised 3 cn
Yengo presentation thailand no vid revised 3 cn
 
Bases de calculo camiara
Bases de calculo camiaraBases de calculo camiara
Bases de calculo camiara
 
مخاطر فى حياتنا اليومية
مخاطر فى حياتنا اليومية مخاطر فى حياتنا اليومية
مخاطر فى حياتنا اليومية
 
Resultats cursa de s'è 2013 alaró lloseta-binissalem-alaró
Resultats cursa de s'è 2013 alaró lloseta-binissalem-alaróResultats cursa de s'è 2013 alaró lloseta-binissalem-alaró
Resultats cursa de s'è 2013 alaró lloseta-binissalem-alaró
 
Hots v08 (may)
Hots v08 (may)Hots v08 (may)
Hots v08 (may)
 
I think bunting 2014 (bm)ol
I think bunting 2014 (bm)olI think bunting 2014 (bm)ol
I think bunting 2014 (bm)ol
 
Penilaian prestari-kerja
Penilaian prestari-kerjaPenilaian prestari-kerja
Penilaian prestari-kerja
 
Reanimacion neonatal
Reanimacion neonatalReanimacion neonatal
Reanimacion neonatal
 
Welfare: Melbourne Mercer Global pension Index
Welfare: Melbourne Mercer Global pension IndexWelfare: Melbourne Mercer Global pension Index
Welfare: Melbourne Mercer Global pension Index
 
Новорічне свято в старшій групі ДНЗ № 28 м. Мукачево
Новорічне свято в старшій групі ДНЗ № 28 м. МукачевоНоворічне свято в старшій групі ДНЗ № 28 м. Мукачево
Новорічне свято в старшій групі ДНЗ № 28 м. Мукачево
 
Sindromes de malabsorción
Sindromes de malabsorciónSindromes de malabsorción
Sindromes de malabsorción
 

Similar a Sobrecarga de constructores (20)

Una clase simple.
Una clase simple. Una clase simple.
Una clase simple.
 
Agregar un metodo que toma parametros
Agregar un metodo que toma parametrosAgregar un metodo que toma parametros
Agregar un metodo que toma parametros
 
Ejercicioconstructor
EjercicioconstructorEjercicioconstructor
Ejercicioconstructor
 
Tutorial 3
Tutorial 3Tutorial 3
Tutorial 3
 
clases y objetos
clases y objetosclases y objetos
clases y objetos
 
Ejercicioconstructor
EjercicioconstructorEjercicioconstructor
Ejercicioconstructor
 
Ejercicioconstructor
EjercicioconstructorEjercicioconstructor
Ejercicioconstructor
 
U5. Arreglos de Objetos.pdf
U5. Arreglos de Objetos.pdfU5. Arreglos de Objetos.pdf
U5. Arreglos de Objetos.pdf
 
Programación C++.pdf
Programación C++.pdfProgramación C++.pdf
Programación C++.pdf
 
Conceptos java
Conceptos javaConceptos java
Conceptos java
 
uso Constructores
uso Constructoresuso Constructores
uso Constructores
 
Constructores uso
Constructores usoConstructores uso
Constructores uso
 
El lenguaje C++ (1).ppt
El lenguaje C++ (1).pptEl lenguaje C++ (1).ppt
El lenguaje C++ (1).ppt
 
El lenguaje C++.ppt
El lenguaje C++.pptEl lenguaje C++.ppt
El lenguaje C++.ppt
 
Package operaciones
Package operacionesPackage operaciones
Package operaciones
 
El apuntador this
El apuntador this El apuntador this
El apuntador this
 
4 Introducción al lenguaje Scala
4 Introducción al lenguaje Scala4 Introducción al lenguaje Scala
4 Introducción al lenguaje Scala
 
Cplus
CplusCplus
Cplus
 
Lecture 37
Lecture 37Lecture 37
Lecture 37
 
Prog gui
Prog guiProg gui
Prog gui
 

Más de Manuel Alejandro Hernandez Sanchez

Más de Manuel Alejandro Hernandez Sanchez (20)

Serialización personalizada
Serialización personalizadaSerialización personalizada
Serialización personalizada
 
Ejemplo
EjemploEjemplo
Ejemplo
 
Entrada
EntradaEntrada
Entrada
 
Ejemplo
EjemploEjemplo
Ejemplo
 
Tipos de excepciones
Tipos de excepcionesTipos de excepciones
Tipos de excepciones
 
Introducción
IntroducciónIntroducción
Introducción
 
Herencia
HerenciaHerencia
Herencia
 
Tipo estático y tipo dinámico
Tipo estático y tipo dinámicoTipo estático y tipo dinámico
Tipo estático y tipo dinámico
 
Introducción
IntroducciónIntroducción
Introducción
 
Uso de polimorfismo
Uso de polimorfismoUso de polimorfismo
Uso de polimorfismo
 
Enlace dinámico
Enlace dinámicoEnlace dinámico
Enlace dinámico
 
Clase base
Clase baseClase base
Clase base
 
Por qué java no soporta la sobre carga de operadores
Por qué java no soporta la sobre carga de operadoresPor qué java no soporta la sobre carga de operadores
Por qué java no soporta la sobre carga de operadores
 
Recolección de basura
Recolección de basuraRecolección de basura
Recolección de basura
 
Retorno de valores
Retorno de valoresRetorno de valores
Retorno de valores
 
Metodos de mensajes
Metodos de mensajesMetodos de mensajes
Metodos de mensajes
 
La destrucción del objeto
La destrucción del objetoLa destrucción del objeto
La destrucción del objeto
 
Acceso al objeto
Acceso al objetoAcceso al objeto
Acceso al objeto
 
Asignación de variables de referencia de objeto
Asignación de variables de referencia de objetoAsignación de variables de referencia de objeto
Asignación de variables de referencia de objeto
 
c) Métodos
c) Métodosc) Métodos
c) Métodos
 

Sobrecarga de constructores

  • 1. Sobrecarga de Constructores. Además de la sobrecarga de métodos normales, también puede sobrecargar métodos de constructor. De hecho, para la mayoría las clases reales que cree, constructores sobrecargados será la norma, no la excepción. Para entender por qué, volvamos a la clase de cuadro desarrollada en el capítulo anterior. Lo que sigue es la última versión del cuadro: class Box { double width; double height; double depth; // This is the constructor for Box. Box(double w, double h, double d) { width = w; height = h; depth = d; } // compute and return volume double volume() { return width * height * depth; } } Como se puede ver, el Box( ) constructor requiere tres parámetros. Esto significa que todas las declaraciones de un cuadro de objetos deben pasar tres argumentos para el constructor de box (). Por ejemplo, la siguiente declaración es actualmente no válida: Box ob = new Box(); Box( ) requiere tres argumentos, es un error llamarlo sin ellos. Esto plantea algunas cuestiones importantes. ¿Qué sucede si simplemente quería un cuadro y no cuidado (o saber) lo que fueron sus dimensiones iniciales? O, ¿qué sucede si desea poder inicializar un cubo mediante la especificación de un único valor que se utilizaría para las tres dimensiones? Como la clase de cuadro actualmente está escrita, estas otras opciones no están disponibles para usted. Afortunadamente, la solución a estos problemas es muy fácil: simplemente de sobrecarga del constructor de cuadro para que maneja las situaciones que se acaba de describir. Aquí es un programa que contiene una versión mejorada del cuadro que hace exactamente eso: /* Here, Box defines three constructors to initialize the dimensions of a box various ways. */ class Box {
  • 2. double width; double height; double depth; // constructor used when all dimensions specified Box(double w, double h, double d) { width = w; height = h; depth = d; } // constructor used when no dimensions specified Box() { width = -1; // use -1 to indicate height = -1; // an uninitialized depth = -1; // box } // constructor used when cube is created Box(double len) { width = height = depth = len; } // compute and return volume double volume() { return width * height * depth; } } class OverloadCons { public static void main(String args[]) { // create boxes using the various constructors Box mybox1 = new Box(10, 20, 15); Box mybox2 = new Box(); Box mycube = new Box(7); double vol; // get volume of first box vol = mybox1.volume(); System.out.println("Volume of mybox1 is " + vol); // get volume of second box vol = mybox2.volume(); System.out.println("Volume of mybox2 is " + vol); // get volume of cube vol = mycube.volume(); System.out.println("Volume of mycube is " + vol); } } Aquí se muestra la salida producida por este programa: Volume of mybox1 is 3000.0 Volume of mybox2 is -1.0
  • 3. Volume of mycube is 343.0 Como puede ver, se llama al constructor sobrecargado adecuado en función de los parámetros especificados cuando se ejecuta en nuevo. Uso de objetos como parámetros Hasta ahora hemos sólo se ha utilizando tipos simples como parámetros a los métodos. Sin embargo, es correcto y común para pasar objetos a métodos. Por ejemplo, considere el siguiente programa corto: // Objects may be passed to methods. class Test { int a, b; Test(int i, int j) { a = i; b = j; } // return true if o is equal to the invoking object boolean equals(Test o) { if(o.a == a && o.b == b) return true; else return false; } } class PassOb { public static void main(String args[]) { Test ob1 = new Test(100, 22); Test ob2 = new Test(100, 22); Test ob3 = new Test(-1, -1); System.out.println("ob1 == ob2: " + ob1.equals(ob2)); System.out.println("ob1 == ob3: " + ob1.equals(ob3)); } } Este programa genera el siguiente resultado: ob1 == ob2: true ob1 == ob3: false Como puede ver, el método equals de () dentro de prueba compara dos objetos para la igualdad y devuelve el resultado. Es decir, compara el objeto invocando con uno que se pasa. Si contienen los mismos valores, el método devuelve true. De lo contrario, devuelve false. Observe que el parámetro o es igual a () especifica la prueba como su tipo. Aunque la prueba es un tipo de clase creado por el programa, se utiliza en sólo del mismo modo que los tipos integrados de Java. Uno de los usos más comunes de los parámetros del objeto implica constructores. Frecuentemente se desea construir un nuevo objeto, por lo que inicialmente es el mismo que algún objeto existente. Para ello, debe definir
  • 4. un constructor que toma un objeto de su clase como un parámetro. Por ejemplo, la siguiente versión del cuadro de permite que un objeto inicializar otro: // Here, Box allows one object to initialize another. class Box { double width; double height; double depth; // construct clone of an object Box(Box ob) { // pass object to constructor width = ob.width; height = ob.height; depth = ob.depth; } // constructor used when all dimensions specified Box(double w, double h, double d) { width = w; height = h; depth = d; } // constructor used when no dimensions specified Box() { width = -1; // use -1 to indicate height = -1; // an uninitialized depth = -1; // box } // constructor used when cube is created Box(double len) { width = height = depth = len; } // compute and return volume double volume() { return width * height * depth; } } class OverloadCons2 { public static void main(String args[]) { // create boxes using the various constructors Box mybox1 = new Box(10, 20, 15); Box mybox2 = new Box(); Box mycube = new Box(7); Box myclone = new Box(mybox1); double vol; // get volume of first box vol = mybox1.volume(); System.out.println("Volume of mybox1 is " + vol); // get volume of second box vol = mybox2.volume();
  • 5. System.out.println("Volume of mybox2 is " + vol); // get volume of cube vol = mycube.volume(); System.out.println("Volume of cube is " + vol); // get volume of clone vol = myclone.volume(); System.out.println("Volume of clone is " + vol); } } Como puede ver cuando comience a crear sus propias clases, proporcionando muchas formas de métodos de constructor normalmente es necesario para permitir que los objetos que se construirán en una manera conveniente y eficiente.