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

Apuntes de Java herencia, constructores, superclases y subclases, sobreescritura

Introducción

En este documento se muestra al final un ejemplo completo de herencia, constructores,


superclases y subclases, que analizaremos paso a paso, para comprender el uso de estos
mecanismos en java.

Para nuestro ejemplo al final de este tema desarrollaremos un programa, que muestra las
coordenadas de un circulo, diámetro, circunferencia y área, de acuerdo a las coordenadas que le
colocamos y el resultado lo muestre en una ventana gráfica. Por el momento comenzaremos
describiendo un ejemplo muy sencillo que iremos complementando poco a poco hasta llegar al
programa del circulo. Es muy importante que realicen las actividades que se les piden en cada
sección y las dudas fuera de clase las coloquen en los espacio de twitter y el
blog(http://javacuitlahuac.blogspot.com) que se han creado para este propósito

De forma gráfica la herencia entre clases se representa de forma gráfica de la siguiente forma:

Aunque no es objeto de estudio para este curso este tipo de diagramación (UML), podemos
emplear las tres imágenes anteriores para describir la herencia.

En la primera imagen de izquierda a derecha podemos ver tres clases una principal llamada Perro
y dos clases más que heredan de esta, los atributos y propiedades de Perro, para nuestro caso
Ovejero Alemán y Caniche, son conocidas como subclases. La herencia se identificada por la
flecha dirigida de la clase que hereda las propiedades a la que proporciona estas.

En la segunda imagen, podemos ver ahora tres que heredan las características de la clase
principal Instrumento, las subclases en cuestión ahora son Guitarra, Piano y Saxofón.

La tercera imagen un poco más compleja, podemos identificar a la clase principal Persona, con los
siguientes atributos y propiedades respectivamente:

Atributos

 Cabeza
 Brazos
 Piernas

Propiedades

 Caminar
 Hablar
 Agarrar
 Hablar

1
Apuntes de Java herencia, constructores, superclases y subclases, sobreescritura

También podemos identificar dos subclases que heredan la propiedades de Persona, esta son
Hombre y Mujer. De igual forma podemos identificar que ambas clases tienen definidos sus propios
atributos_______ y _________.

Las características de una clase, se pueden heredar de clases debajo de ella en la jerarquía y no
entre subclases.

No es válida

Debido a la propiedad de la herencia las subclases, pueden utilizar las propiedades y atributos de
la clase que heredan, siempre y cuando no esté restringido su acceso, por algún tipo de
modificador como private.

Aterrizando un poco más el tema en el lenguaje de programación java, podemos ver las tres clases
de la figura anterior, de la siguiente forma.

package herencia package herencia package herencia


class Persona{
protected int cabeza,brazos,piernas; class Hombre extends Persona{ class Mujer extends Persona{

public void caminar(){ public void crear esperma(){ public void crearOvulo (){
//Código del método } }
}
public void agarrar(){ }// Cierre de la clase Hombre }// Cierre de la clase Mujer
//Código del método
}
public void hablar(){
//Código del método
}
} // Cierre de la clase Persona

Observa la palabra extends, en las clases Hombre y Mujer, esta palabra en java nos indica lo
siguiente:

1. Qué son subclases de Persona.


2. Que pueden utilizar los métodos y atributos de la clase principal, Persona, aunque no estén
declarados en las sublclases, siempre y cuando no tengan el modificador de acceso
private.
3. Las subclases, pueden usar el método constructor de la subclase de la que heredan sus
características (este concepto se verá más adelante).
4. Lo métodos declarados en las subclases no pueden ser usados por la clase principal.

2
Apuntes de Java herencia, constructores, superclases y subclases, sobreescritura

Veamos ahora la forma en ¿cómo las subclases pueden invocar las características de la clase
principal?

Primero declaramos un objeto de la subclase, por ejemplo, para Hombre.

Hombre objetoh= new Hombre(); // Referencia a un objeto de la subclase


objetoh.caminar(); // Invocamos al método de la superclase
objetoh.agarrar();//Invocamos al método de la superclase
objetoh.hablar();//Invocamos al método de la superclase
//Realizarlo ahora para la clase Mujer

Ahora completemos estas tres clases, con nuestra clase principal que contiene el método main,
para poder cerrar este ejemplo.

package herencia;

public class Herencia {

public static void main(String[] args) {


Hombre objetoH = new Hombre();
Mujer objetoM= new Mujer();
objetoH.agarrar();
objetoH.caminar();
objetoH.hablar();
// Realizarlo ahora para la clase Mujer

}// Cierre de la clase Herencia

Ahora la clase Persona

package herencia;

class Persona {
protected int cabeza,brazos,piernas;

public void caminar(){


System.out.println("Desde caminar en Persona usando herencia");
//Código del método
}
public void agarrar(){
System.out.println("Desde agarrar en Persona usando herencia");
//Código del método
}
public void hablar(){
System.out.println("Desde hablar en Persona usando herencia");
//Código del método
}

3
Apuntes de Java herencia, constructores, superclases y subclases, sobreescritura

Ahora la clase hombre

package herencia;

class Hombre extends Persona {


public void crearEsperma(){
}

Ahora la clase mujer

package herencia;

class Mujer extends Persona{


public void crearOvulo (){
}
}

Al ejecutar el programa la salida sería la siguiente:

Desde agarrar en Persona usando herencia


Desde caminar en Persona usando herencia
Desde hablar en Persona usando herencia

Resumiendo
Como podemos ver nuestro programa está compuesto de cuatro clases:
1. La clase principal Herencia
2. La clase Persona
3. La clase Hombre
4. La clase Mujer

De acuerdo a lo que hemos estado describiendo, se concluye lo siguiente:

1. La clase Persona, hereda sus propiedades a las subclases Hombre y Mujer


2. Las subclases Hombre y Mujer, pueden usar las características de la clase Persona, por
que heredan de esta.
3. Las subclases no se pueden heredar entre ellas.
4. La superclase, no puede heredar de las subclases.

Ejercicio complementario

Para reforzar esta parte del tema realice las siguientes actividades:

1. Complete la clase principal, para que invoque que la clase Mujer y pueda invocar los
métodos de la clase Persona.
2. Modifique los métodos de la clase Persona, para que identifique de que subclase se le está
invocando, esto lo puede hacer por medio de parámetros formales dentro de los métodos
correspondientes en la clase Persona.
3. Invoque a los métodos de la clase Persona por medio de los objetos creados para la clase
Hombre y Mujer, pasándole la cadena “invocando por medio de Hombre” e “invocando por
medio de Mujer” y anexándoselo al final de cadena que se mostro en el ejemplo, para que
los despliegue de la siguiente forma.

4
Apuntes de Java herencia, constructores, superclases y subclases, sobreescritura

a. Desde agarrar en Persona usando herencia invocando por medio de


Hombre
b. Desde caminar en Persona usando herencia invocando por medio de
Hombre
c. Desde hablar en Persona usando herencia invocando por medio de
Hombre
d. Para mujer solo cambie la cadena a anexar por invocando por medio de Mujer
i. Para que quede de la siguiente forma: Desde hablar en Persona
usando herencia invocando por medio de Mujer.
4. Invoque a los métodos de las subclases, pasándoles una cadena como parámetro formal
para que indiquen el método de la subclase Hombre o Mujer, según sea el
caso(crearEsperma y crearOvulo) por ejemplo se debería desplegar
algo como esto, desde los métodos respectivos.
a. Invocando al método crearEsperma en la clase Hombre.
b. Invocando al método crearOvulo en la clase Mujer.
5. Concluya sus aprendizajes.

Sobre escritura en java

La sobresescritura es una propiedad de los lenguajes orientados a objetos, que nos permiten
reutilizar código de otras clases o de la misma clase. Los únicos elementos de una clase que se
puede sobre escribir son los métodos, este proceso en java se conoce también como overriding.
En este punto utilizaremos los términos superclase, clase principal o clase padre, para referirnos a
la clase que hereda sus propiedades a los demás.

Podemos concretar lo siguiente:

1. Una subclase puede modificar el comportamiento de los métodos heredados de la clase


principal, padre o superclase.
2. Una subclase puede crear un método con diferente funcionalidad que el de la superclase
pero debe de cumplir con los siguiente:
a. Debe conservar el mismo nombre
b. Debe tener el mismo tipo de retorno
c. Debe tener la misma lista de argumentos.

Como ejemplo considere el siguiente UML

5
Apuntes de Java herencia, constructores, superclases y subclases, sobreescritura

class System

Persona

# cumpleaños: String
# nombre: String
# salario: double

+ obtenDetalles() : String

Gerente

# departamento: String

# obtenDetalles() : String

Traslademos esto ahora a lenguaje en java

package sobreescritura;

public class Empleado {


protected String nombre;
protected double salario;
protected String cumpleaños;

public String obtenDetalles(){


return "nombre" + nombre + "\n" + "Salario" + salario;

package sobreescritura;

public class Gerente extends Empleado{


protected String departamento;

public String obtenDetalles(){


return "nombre" + nombre + "\n" + "Salario" + salario + departamento;

Observe que el método obtenDetalles, ha sido reescrito(sobreescrito) en la clase Gerente que


hereda de la clase Empleado. Observe que el solo agregarle la variable del tipo String
departamento ha cambiado la funcionalidad del cliente, también vea lo siguiente:

1. El método sobreescrito en la subclase Gerente tiene el mismo tipo de modificador de


acceso que el de la clase padre.

6
Apuntes de Java herencia, constructores, superclases y subclases, sobreescritura

2. Que el método sobre escrito en la clase Gerente, tiene el mismo tipo de retorno que el de
la clase padre
3. Que el método sobreescrito en el hijo, tiene el mismo nombre que el de la superclase
4. Que el método sobreescrito en la subclase, tiene el mismo número de parámetros que el
de la clase principal.
5. Que el método sobreescrito en la subclase tiene el mismo tipo de retorno que el de la clase
principal.

Ahora modifiquemos nuestro ejemplo de la clase Persona, para que se sobreescriban los métodos
en las subclase Hombre.

package herencia;

class Hombre extends Persona {


protected String unacad= " Esto es una cadena más para sobre escribir el método
caminar en Hombre";
public void crearEsperma(String cadena){
System.out.println(cadena);

//Sobreescribiendo al método caminar en la clase Hombre


public void caminar(int val1,int val2,double fl){

System.out.println(val1 + " "+ val2 +" " + fl + unacad);

Ejercicio complementario sobreescriba los método restantes, pero ahora en la clase Mujer, coloque
cualquier otra funcionalidad, como por ejemplo que calcule el área de un circulo.

Sobrecarga de métodos (overloading).

En algunas circunstancias podrán necesitar que diversos métodos en un misma clase, que realizan
en esencia el mismo trabajo, pero con diferentes parámetros formales. Las reglas para estos
casos son:

Un método sobrecargado se utiliza para reutilizar el nombre de un método pero con diferentes
argumentos (opcionalmente un tipo diferente de retorno). Las reglas para sobrecargar un método
son las siguientes:

 Los métodos sobrecargados deben de cambiar la lista de argumentos.


 Pueden cambiar el tipo de retorno.
 Pueden cambiar el modificador de acceso.
 Pueden declarar nuevas o más amplias excepciones.
 Un método puede ser sobrecargado en la misma clase o en una subclase.

Veamos un método que se desea sobrecargar:

7
Apuntes de Java herencia, constructores, superclases y subclases, sobreescritura

public void cambiarTamano(int tamano, String nombre, float patron){

Los siguientes métodos son sobrecargas legales del método cambiarTamano():

public void cambiarTamano(int tamano, String nombre){


}
public int cambiarTamano(int tamano, float patron){
}
public void cambiarTamano(float patron, String nombre) throws IOException{
}

Como invocar a un método sobrecargado

Lo que define qué método es el que se va a llamar son los argumentos que se envían al mismo
durante la llamada. Si se invoca a un método con un String como argumento, se ejecutará el
método que tome un String como argumento, si se manda a llamar al mismo método pero con un
float como argumento, se ejecutará el método que tome un float como argumento y así
sucesivamente. Si se invoca a un método con un argumento que no es definido en ninguna de las
versiones sobrecargadas entonces el compilador arrojará un mensaje de error.

Ejemplo de una clase con un método sobrecargado:

public class Sobrecarga {


public void Numeros(int x, int y){
System.out.println("Método que recibe enteros.");
}
public void Numeros(double x, double y){
System.out.println("Método que recibe flotantes.");
}
public void Numeros(String cadena){
System.out.println("Método que recibe una cadena: "+ cadena);
}
public static void main (String args []){
Sobrecarga s = new Sobrecarga();
int a = 1;
int b = 2;
s.Numeros(a,b);
s.Numeros(3.2,5.7);
s.Numeros("Monillo007");
}
}//Cierre de la clase

Al ejecutar el código anterior obtendremos lo siguiente:

Método que recibe enteros.


Método que recibe flotantes.
Método que recibe una cadena: Monillo007

8
Apuntes de Java herencia, constructores, superclases y subclases, sobreescritura

Hasta el momento hemos visto que los método tanto en la sobreescritura como en la sobrecarga,
se han pasado datos primitivos y cadenas de caracteres, sin embargo, también pueden pasarse
como parámetros a objetos, en este caso se dice que se pasa por referencia, porque lo que se
envía entre los métodos son las referencias a los objetos de las clases.

 Como ejercicios finales haga una tabla resumen de las reglas para la sobreescritura y la
sobrecarga de métodos y otra tabla en la que se plasmen las diferencias entre la
sobrecarga y la sobreescritura de métodos.
 Complete estos apuntes con lo que se vio en clase, de acuerdo a tema visto y identifique si
se trata de una sobrecarga o una sobreescritura de métodos.

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