Вы находитесь на странице: 1из 13

SOBRECARGA DE CONSTRUCTORES

HERENCIA Y SUPER CLASES CLASE 26 SEPTIEMBRE

SOBRE CARGA DE CONSTRUCTORES


Cuando ms de un constructor o mtodo tienen el mismo nombre pero distintos parmetros decimos que el

constructor o mtodo est sobrecargado. La sobrecarga de constructores o mtodos permite llevar a cabo una tarea de distintas maneras (por ejemplo crear un objeto Persona con un nombre ya establecido o crearlo sin nombre establecido)

EJEMPLO
//Ejemplo de clase con dos constructores y un mtodo public class Persona { private String nombre; private int edad; public Persona (String nombrePersona) { //CONSTRUCTOR 1 nombre = nombrePersona; edad = 0; } public Persona () { //CONSTRUCTOR2 nombre = ""; edad = 0; } public String getNombre () { return nombre; } //Cierre del mtodo } //Cierre de la clase

SUPER
Cuando el constructor de la subclase invoca al constructor de la superclase. Por lo tanto la palabra clave super como primera lnea del constructor de la subclase., La palabra super ir seguida de parntesis dentro de los cuales pondremos los parmetros que requiera el constructor de la superclase al que queramos invocar.

QU OCURRE SI OLVIDAMOS PONER SUPER COMO PRIMERA LNEA DE LA SUBCLASE?


Hay dos posibilidades: si la superclase tiene un constructor sin parmetros, el compilador incluir en segundo plano super de forma automtica y no saltar un error. La otra posibilidad es que no haya un constructor sin parmetros, en cuyo caso saltar un error.

EN POCAS PALABRAS
A modo de resumen: la inicializacin de un objeto de una subclase comprende dos pasos. La invocacin al

constructor de la superclase (primera lnea del constructor: super) y el resto de instrucciones propias del constructor de la subclase.

EJEMPLO; SUPER CLASE


public Persona() { nombre = ""; apellidos = ""; edad = 0; } public Persona (String nombre, String apellidos, int edad) { this.nombre = nombre; this.apellidos = apellidos; this.edad = edad;

EN LA SUBCLASE:
public Profesor () { super(); IdProfesor = "Unknown"; }

profesor (String nombre, String apellidos, int edad) { super(nombre, apellidos, edad); IdProfesor = "Unknown"; }

PALABRA CLAVE SUPER PARA INVOCAR MTODOS DE SUPERCLASES DESDE SUBCLASES EN JAVA
Sintaxis:

super.nombreDelMetodo(parmetros si los hay);


Tiene como efecto la invocacin de un mtodo de la Superclase Ejemplo: public void mostrarDatos() { super.mostrarDatos(); System.out.println("Comienzo interinidad: " +

FechaComienzoInterinidad.getTime().toString() );
}

QU HEMOS HECHO?
Dentro del mtodo hijo hemos incluido una llamada al mtodo padre que haba perdido visibilidad debido a que lo habamos sobreescrito. Resultado: Se procede a mostrar los datos de los profesores existentes en el CUALTOS Datos Profesor. Profesor de nombre: Juan Hernndez Garca con Id de profesor: Prof 22-387-11 Datos Profesor. Profesor de nombre: Jos Luis Morales Prez con Id de profesor: Unknown Comienzo interinidad: Fri Nov 22 12:40:38 CET 2019

EN RESUMEN
Gracias a la instruccin super.mostrarDatos() hemos

incluido dentro de un mtodo sobreescrito el mtodo deseado de la superclase. La llamada a super dentro de un

mtodo puede ocurrir en cualquier lugar dentro del cdigo.


Equivale a la ejecucin del mtodo de la superclase y es opcional: la hacemos slo cuando nos resulta necesaria o conveniente para poder acceder a un mtodo sobreescrito.

EJEMPLO ANTRIOR
Dadas las siguientes clases: class A { int at1=-1, at2=-1; A(int i, int j) { at1=i; at2=j; } A(int i) { this(i,0); } A() { this(0); } public String toString() { return "at1=" + at1 + " at2="+at2; } } class B extends A { int at3=-1; B(int i, int j, int k) { super(i,j); at3=k; } B(int i) { at3=i; } public String toString() { return super.toString() + " at3=" + at3; } } class C extends B { int at4=-1; C(int i, int j, int r, int s) { super(i,j,r); at4=s; } C(int i, int j, int k) { at4=0; } public String toString() { return super.toString() + " at4=" + at4; } }

RESPUESTA
Indicar la salida por pantalla que generara cada una de las siguientes sentencias o, en caso de que alguna de ellas no sea correcta, explicar el error.

1.- A obj = new B(1,2,3); System.out.println(obj);


2.- B obj = new B(1); System.out.println(obj); 3.- C obj = new C(1,2,3,4); System.out.println(obj); 4.- C obj = new C(1,2,3); System.out.println(obj);
1.- at1=1 at2=2 at3=3 2.- at1=0 at2=0 at3=1 3.- at1=1 at2=2 at3=3 at4=4 4.- Error. En la clase B no existe un constructor vaco, y en el constructor de C no se especifica explcitamente qu constructor debe ejecutarse en B

Вам также может понравиться