Programming
T05-001-04 Métodos constructores.
Enunciado
Sobrecarga del constructor
El constructor de una clase, al igual que cualquier otro método, puede estar sobrecargado. Eso significa que es posible disponer de métodos con el mismo nombre, siempre que se diferencien en el número o en el tipo de los parámetros.
Ejemplo:
public class OOP {
public static void main(String[] args) {
SubClase miObj1 = new SubClase(8, 3);
System.out.println(miObj1.suma());
SubClase miObj2 = new SubClase();
System.out.println(miObj2.suma());
}
}
class SubClase {
int x, y;
public SubClase() {
x = 5;
y = 7;
}
public SubClase(int _x, int _y) {
x = _x;
y = _y;
}
public int suma() {
return x + y;
}
}Nota: si dos métodos de la misma clase únicamente se diferencian en el nombre de los parámetros, se generará un error.
Ejercicio
Partiendo de la clase
Moduloque soluciona el último ejercicio, combina un constructor de clase sin parámetros con otro constructor de la clase con parámetros.La aplicación pedirá 3 veces el nombre del módulo y la calificación. Con las siguientes directrices:
- Si el nombre que facilita el usuario está vacío, no se le solicitará la nota y se invocará el constructor sin parámetros, que inicializará las propiedades del objeto a "Programacion" y 8.
- Si el nombre que facilita el usuario no está vacío, se solicitará al usuario la nota hasta que suministre una nota >= a la calificación máxima permitida. A continuación, se invocará el constructor con parámetros, el cual, inicializará las propiedades del objeto con los datos suministrados por el usuario.
Para evitar que entre los efectos indeseables de combinar
sc.nextLine()consc.nextInt()entre distintas ejecuciones del bucle que solicita los datos de los 3 módulos, introduce al final de las sentencias que se ejecutan en el caso de que la longitud del nombre sea mayor que 0:
sc.nextLine();Para saber si un nombre de módulo está vacío o no, podemos utilizar el método
length()de la claseString, de la siguiente forma:
if (nombre.length() > 0)
Solución
package oop;
import java.util.Scanner;
public class OOP {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String nombre;
int nota;
Modulo miModulo;
for (int i = 0; i < 3; i++) {
System.out.println("Escriba el nombre del modulo: ");
nombre = sc.nextLine();
if (nombre.length() > 0) {
do {
System.out.println("Escriba la nota del modulo: ");
nota = Integer.parseInt(sc.nextLine());
} while (nota > Modulo.calificacionMaxima());
miModulo = new Modulo(nota, nombre);
} else {
miModulo = new Modulo();
}
System.out.println("Nombre del modulo: " + miModulo.nombre);
System.out.println("Nota: " + miModulo.nota);
System.out.println("Calificacion textual: " + miModulo.calificacion());
}
}
}
class Modulo {
int nota;
String nombre;
public Modulo() {
nota = 8;
nombre = "Programacion";
}
public Modulo(int _nota, String _nombre) {
this.nota = _nota;
this.nombre = _nombre;
}
public String calificacion() {
String notaTextual;
switch (nota) {
case 0:
case 1:
notaTextual = "Muy deficiente";
break;
case 2:
case 3:
case 4:
notaTextual = "Insuficiente";
break;
case 5:
notaTextual = "Suficiente";
break;
case 6:
notaTextual = "Bien";
break;
case 7:
case 8:
notaTextual = "Notable";
break;
case 9:
case 10:
notaTextual = "Sobresaliente";
break;
default:
notaTextual = "Fuera de rango";
}
return notaTextual;
}
static int calificacionMaxima() {
return 10;
}
}
Input
Bases de Datos 13 7 Sistemas 12 5
Sistemas 12 5 Bases de Datos 13 7
Output
Escriba el nombre del modulo: Escriba la nota del modulo: Escriba la nota del modulo: Nombre del modulo: Bases de Datos Nota: 7 Calificacion textual: Notable Escriba el nombre del modulo: Nombre del modulo: Programacion Nota: 8 Calificacion textual: Notable Escriba el nombre del modulo: Escriba la nota del modulo: Escriba la nota del modulo: Nombre del modulo: Sistemas Nota: 5 Calificacion textual: Suficiente
Escriba el nombre del modulo: Escriba la nota del modulo: Escriba la nota del modulo: Nombre del modulo: Sistemas Nota: 5 Calificacion textual: Suficiente Escriba el nombre del modulo: Escriba la nota del modulo: Escriba la nota del modulo: Nombre del modulo: Bases de Datos Nota: 7 Calificacion textual: Notable Escriba el nombre del modulo:

