Constructores en Java
Constructores en Java
Todas las clases tienen constructores, ya sea que usted defina uno o no,
porque Java proporciona automáticamente un constructor
predeterminado. En este caso, las variables de miembro no
inicializadas tienen sus valores predeterminados, que son cero, null y
false, para tipos numéricos, tipos de referencia y booleanos,
respectivamente. Una vez que defines tu propio constructor, el
constructor predeterminado ya no se usa.
class MiClase {
int x;
MiClase(){
x=10;
class ConstructorDemo {
MiClase(){
x=10;
}
Este constructor asigna a la variable de instancia x de MiClase el valor
de 10. Este constructor es llamado por new cuando se crea un objeto.
Por ejemplo, en la línea:
10 - 10
2. Constructores parametrizados
class MiClase {
int x;
MiClase(int i){
x=i;
class ConstructorDemo {
class Vehiculo {
int pasajeros; //números de pasajeros
pasajeros=p;
capacidad=c;
mpg=m;
//Retornando el rango
int rango(){
return mpg*capacidad;
return (double)miles/mpg;
class DemoVehiculo {
double galones;
int distancia = 250;
galones=minivan.capacidadnueva(distancia);
System.out.println("Para ir a "+distancia+" en
minivan, se necesita "+galones+" galones");
galones=sportscar.capacidadnueva(distancia);
System.out.println("Para ir a "+distancia+" en
sportscar, se necesita "+galones+" galones");
Salida:
int x;
MiClase(){
System.out.println("Dentro de MiClase().");
x=0;
MiClase(int i){
System.out.println("Dentro de MiClase(int).");
x=i;
MiClase(double d){
System.out.println("Dentro de MiClase(double).");
x=(int)d;
x=i*j;
class DemoSobrecargaConstructor{
Salida:
Dentro de MiClase().
Dentro de MiClase(int).
Dentro de MiClase(double).
t1.x: 0
t2.x: 28
t3.x: 15
t4.x: 8
MiClase() está sobrecargado de cuatro maneras, cada una construyendo
un objeto de manera diferente. El constructor apropiado se llama en
función de los parámetros especificados cuando se ejecuta. Al
sobrecargar el constructor de una clase, le da flexibilidad al usuario de
su clase en la forma en que se construyen los objetos.
Una de las razones más comunes por las que los constructores están
sobrecargados es permitir que un objeto inicialice otro. Por
ejemplo, considere este programa que usa la clase Summation para
calcular la suma de un valor entero:
class Suma{
int sum;
Suma(int num){
sum=0;
sum+=i;
}
sum=obj.sum;
class DemoSobrecargaConstructor{
System.out.println("s1.sum: "+s1.sum);
System.out.println("s2.sum: "+s2.sum);
Salida:
s1.sum: 15
s2.sum: 15
A menudo, como muestra este ejemplo, una ventaja de proporcionar un
constructor que usa un objeto para inicializar otro es la eficiencia. En
este caso, cuando se construye s2, no es necesario recalcular la suma.
class DemoSCT
// se especifican
largo = w;
ancho = h;
alto = d;
numero = num;
DemoSCT()
// Vacio
DemoSCT(int num)
this();
numero = num;
System.out.println(DemoSCT1.largo);
Salida:
0.0
DemoSCT(int num)
numero = num;
instrucción en un constructor */
this(); /*ERROR*/
Este escenario ocurre cuando una clase derivada y una clase base tienen
los mismos miembros de datos. En ese caso, existe una posibilidad de
ambigüedad para la JVM. Podemos entenderlo más claramente usando
este fragmento de código:
class Vehicle
{
int maxSpeed = 180;
void display()
class Test
small.display();
Salida:
class Person
void message()
/* Subclase Student */
class Student extends Person
void message()
void display()
message();
super.message();
class Test
s.display();
Salida:
/* superclase Person */
class Person
Person()
Student()
class Test
Salida:
En este apartado vamos a ver cómo una clase en Java puede tener más
de un constructor y a entender qué implicaciones y significado tiene
esto. Escribiremos el código de una clase y lo compilaremos para ir
analizando con base a este código cómo se generan clases con varios
constructores y el significado del concepto de sobrecarga de
constructores o métodos.
Hemos definido una clase, denominada Persona, que nos permite crear
objetos de tipo Persona. Todo objeto de tipo Persona estará definido por
dos campos: nombre (tipo String) y edad (tipo entero), y admitirá un
método: getNombre(). Al realizar la invocación
nombreDelObjeto.getNombre() obtendremos el atributo nombre del
objeto.
La clase tiene dos constructores. ¿Qué significado tiene esto? Pues que
podremos crear personas de dos maneras distintas:
EJERCICIO
Ejemplo:
5. Escribe el código de una clase test con el método main que cree
un objeto cuyo tipo es Vehiculo, instanciado como Taxi. Establece
valores para sus atributos y usa el método toString(). ¿Qué
método toString() resulta de aplicación, el propio de la clase
Vehiculo o el propio de la clase Taxi? ¿Por qué?