Listado completo de tutoriales

26 - Constructor de la clase


En Java podemos definir un método que se ejecute inicialmente y en forma automática. Este método se lo llama constructor.

El constructor tiene las siguientes características:

  • Tiene el mismo nombre de la clase.
  • Es el primer método que se ejecuta.
  • Se ejecuta en forma automática.
  • No puede retornar datos.
  • Se ejecuta una única vez.
  • Un constructor tiene por objetivo inicializar atributos.

Problema 1:

Se desea guardar los sueldos de 5 operarios en un vector. Realizar la creación y carga del vector en el constructor.

Programa:

Ver video
import java.util.Scanner;
public class Operarios {
    private Scanner teclado;
    private int[] sueldos;
	
    public Operarios()
    {
        teclado=new Scanner(System.in);
        sueldos=new int[5];
        for(int f=0;f<5;f++) {
            System.out.print("Ingrese valor de la componente:");
            sueldos[f]=teclado.nextInt();
        }	
    }
	
    public void imprimir() {
        for(int f=0;f<5;f++) {
            System.out.println(sueldos[f]);
        }
    }
	
    public static void main(String[] ar) {
        Operarios op=new Operarios();
        op.imprimir();
    }
}

Como podemos ver es el mismo problema que resolvimos cuando vimos vectores. La diferencia es que hemos sustituido el método cargar con el constructor:

    public Operarios()
    {
        teclado=new Scanner(System.in);
        sueldos=new int[5];
        for(int f=0;f<5;f++) {
            System.out.print("Ingrese valor de la componente:");
            sueldos[f]=teclado.nextInt();
        }	
    }

Como la clase se llama Operarios el constructor tiene el mismo nombre, no disponemos la palabra clave void ya que el constructor no puede retornar datos.

La ventaja de plantear un constructor en lugar de definir un método con cualquier nombre es que se llamará en forma automática cuando se crea un objeto de esta clase:

    public static void main(String[] ar) {
        Operarios op=new Operarios();

Cuando se crea el objeto op se llama al método constructor.

Finalmente llamamos al método imprimir:

        op.imprimir();

Problema 2:

Plantear una clase llamada Alumno y definir como atributos su nombre y su edad. En el constructor realizar la carga de datos. Definir otros dos métodos para imprimir los datos ingresados y un mensaje si es mayor o no de edad (edad >=18)

Programa:

Ver video
import java.util.Scanner;
public class Alumno {
    private Scanner teclado;
    private String nombre;
    private int edad;
    
    public Alumno() {
        teclado=new Scanner(System.in);
        System.out.print("Ingrese nombre:");
        nombre=teclado.next();
        System.out.print("Ingrese edad:");
        edad=teclado.nextInt();
    }
    
    public void imprimir() {
        System.out.println("Nombre:"+nombre);
        System.out.println("Edad:"+edad);
    }
    
    public void esMayorEdad() {
        if (edad>=18) {
            System.out.print(nombre+" es mayor de edad.");
        } else {
            System.out.print(nombre+" no es mayor de edad.");
        }
    }
    
    public static void main(String[] ar) {
        Alumno alumno1=new Alumno();
        alumno1.imprimir();
        alumno1.esMayorEdad();
    }
}

Declaramos la clase Persona, sus tres atributos y definimos el constructor con el mismo nombre de la clase:

public class Alumno {
    private Scanner teclado;
    private String nombre;
    private int edad;
    
    public Alumno() {
        teclado=new Scanner(System.in);
        System.out.print("Ingrese nombre:");
        nombre=teclado.next();
        System.out.print("Ingrese edad:");
        edad=teclado.nextInt();
    }

En la main el constructor se llama en forma automática cuando creamos un objeto de la clase Alumno:

    public static void main(String[] ar) {
        Alumno alumno1=new Alumno();

Los otros dos métodos deben llamarse por su nombre y en el orden que necesitemos:

        alumno1.imprimir();
        alumno1.esMayorEdad();

Problema 3:

Plantear una clase TablaMultiplicar. Definir dos constructores uno con un parámetro que llegue un entero indicando que tabla queremos ver y otro con dos enteros que indique el primero que tabla queremos ver y el segundo parámetro indica cuantos términos mostrar.
Si no llega la cantidad de términos a mostrar inicializar en 10 los términos a mostrar

Programa:

Ver video

public class TablaMultiplicar {
    private int tabla;
    private int terminos;
    
    public TablaMultiplicar(int ta,int ter) {
        tabla=ta;
        terminos=ter;
    }

    public TablaMultiplicar(int ta) {
        tabla=ta;
        terminos=10;
    }
    
    public void imprimir() {
        System.out.println("Tabla de multiplicar del "+tabla);
        for(int f=1;f<=terminos;f++) {
            int resultado=f*tabla;
            System.out.println(tabla + "*" + f + " = " + resultado);
        }
    }
    
    public static void main(String[] ar) {
        TablaMultiplicar tabla1=new TablaMultiplicar(5);
        tabla1.imprimir();
        TablaMultiplicar tabla2=new TablaMultiplicar(3,5);
        tabla2.imprimir();
    }
}

Declaramos la clase TablaMultiplicar, con dos atributos:

public class TablaMultiplicar {
    private int tabla;
    private int terminos;

Definimos dos constructores en la clase TablaMultiplicar:

    public TablaMultiplicar(int ta,int ter) {
        tabla=ta;
        terminos=ter;
    }

    public TablaMultiplicar(int ta) {
        tabla=ta;
        terminos=10;
    }

Si cuando creamos un objeto de la clase TablaMultiplicar le pasamos dos enteros, luego se ejecuta el primer constructor y se inicializan los atributos con los datos que llegan:

        TablaMultiplicar tabla2=new TablaMultiplicar(3,5);

En cambio si llamamos al constructor que tiene un solo parámetro se ejecuta el segundo constructor:

        TablaMultiplicar tabla1=new TablaMultiplicar(5);

Tengamos en cuenta que es un problema que no requiere que se carguen valores por teclado, luego por eso no definimos un objeto de la clase Scanner.

En la main definimos dos objetos de la clase TablaMultiplicar para comprobar los resultados de llamar a uno u otro constructor:

    public static void main(String[] ar) {
        TablaMultiplicar tabla1=new TablaMultiplicar(5);
        tabla1.imprimir();
        TablaMultiplicar tabla2=new TablaMultiplicar(3,5);
        tabla2.imprimir();
    }

La definición de múltiples constructores hace que nuestra clase se adapte a más situaciones.

Problemas propuestos

  1. Confeccionar una clase que represente un empleado. Definir como atributos su nombre y su sueldo. En el constructor cargar los atributos y luego en otro método imprimir sus datos y por último uno que imprima un mensaje si debe pagar impuestos (si el sueldo supera a 3000) Ver video
  2. Implementar la clase operaciones. Se deben cargar dos valores enteros en el constructor, calcular su suma, resta, multiplicación y división, cada una en un método, imprimir dichos resultados. Ver video
Solución
import java.util.Scanner;
public class EmpleadoFabrica {
    private Scanner teclado;
    String nombre;
    float sueldo;
    
    public EmpleadoFabrica() {
        teclado=new Scanner(System.in);
        System.out.print("Ingrese el nombre del empleado:");
        nombre=teclado.next();
        System.out.print("Ingrese su sueldo:");
        sueldo=teclado.nextFloat();
    }
    
    public void pagaImpuestos() {
        if (sueldo>3000) {
            System.out.print("Debe abonar impuestos");
        } else {
            System.out.print("No paga impuestos");
        }
    }
    
    public static void main(String[] ar) {
        EmpleadoFabrica empleado1;
        empleado1=new EmpleadoFabrica();
        empleado1.pagaImpuestos();
    }
}




import java.util.Scanner;
public class OperacionesCalculo {
    private Scanner teclado;
    int valor1,valor2;
    
    public OperacionesCalculo() {
        teclado=new Scanner(System.in);
        System.out.print("Ingrese primer valor:");
        valor1=teclado.nextInt();
        System.out.print("Ingrese segundo valor:");
        valor2=teclado.nextInt();
    }
    
    public void sumar() {
        int suma;
        suma=valor1+valor2;
        System.out.println("La suma es:"+suma);
    }
    
    public void restar() {
        int resta;
        resta=valor1-valor2;
        System.out.println("La resta es:"+resta);
    }
    
    public void multiplicar() {
        int multiplicacion;
        multiplicacion=valor1*valor2;
        System.out.println("La multiplicación es:"+multiplicacion);
    }
    
    public void dividir() {
        int division;
        division=valor1/valor2;
        System.out.println("La división es:"+division);
    }
    
    public static void main(String[] ar) {
    	OperacionesCalculo opera= new OperacionesCalculo();
        opera.sumar();
        opera.restar();
        opera.multiplicar();
        opera.dividir();
    }
}

Retornar