Beruflich Dokumente
Kultur Dokumente
Que es la herencia?
La herencia es una caracterstica de algunos lenguajes de programacin orientados a objetos, que permite crear objetos a base de otros ya existentes. Como ya hemos comentado en clases, la Orientacin a objetos permite la reutilizacin de cdigo. Llamaremos superclase, a la clase de la cual heredamos, y en el caso de Java, solo podremos heredar de una sola clase. La clase de la cual heredamos, nos aporta todas las funciones y mtodos que esta posee, dejando as ms fcil su implementacin.
Herencia en Java
Herencia simple Object es la clase raz (paquete java.lang) Object describe las propiedades comunes a todos los objetos
Object
A B
D
4
Tipos de herencia
Herencia simple Una clase puede heredar de una nica clase. Ejemplo: Java, C#
Herencia mltiple Una clase puede heredar de varias clases. Clases forman un grafo dirigido acclico. Ejemplos: Eiffel, C++
Herencia en Java
Java permite definir una clase como subclase de una clase padre.
class clase_hija extends clase_padre { .......... }
Clase Padre
Clase Hija
Herencia en Java
Una subclase hereda de su superclase mtodos y variables tanto de clase como de instancia. Una subclase puede aadir nuevos mtodos y variables. Una subclase puede redefinir mtodos heredados. Sintaxis: class nombreHija extends nombrePadre {} Por defecto toda clase extiende la clase Object
JERARQUIA DE CLASES
GENERALIZACION
ESPECIALIZACION
Se detectan clases con un comportamiento comn. Ejemplo: Triangulo y polgono son figuras.
Se detecta que una clase es un caso especial de otra Ejemplo: Triangulo es un tipo de Polgono.
public Persona(String nom, int ed) { nombre = nom; edad = ed; } public void mostrar() { System.out.println("Nombre: "+ nombre); System.out.println("Edad: "+ edad); } public static void main(String args[]) { Persona yo= new Persona("Balta", 99); yo.mostrar(); } }
Acceso protegido
Una subclase no puede acceder a los campos privados de la superclase Para permitir que un mtodo de la subclase pueda acceder a un campo de la superclase, ste tiene que declararse como protected Protected: miembros visibles a las subclases y al resto de clases del paquete Resumen de modificadores de acceso: private visible slo en la clase public visible a todas las clases protected visible en el paquete y las subclases Sin modificador visible en el paquete
12
Evitando la herencia
Se puede evitar que una clase sea heredada:
Paquetes
Los paquetes son contenedores de clases que permite delimitar el espacio en el cual una clase existe. Los paquetes permiten que exista ms de una clase con el mismo nombre. Para indicar que una clase pertenece a un cierto paquete, se utiliza la palabra clave package La forma de esta sentencia es:
package nombrePaquete;
Conversin de tipos
Java es un lenguaje fuertemente tipado, es decir, en tiempo de compilacin se comprueba la compatibilidad de tipos
Conversin implcita: (automtica) tipos primitivos a uno que soporte un rango mayor de valores float saldo = 300; //podemos asignarle un entero int codigo = 3.7; //ERROR
conversin de referencias: todo objeto es compatible con sus superclases cast-up siempre vlido Rectangulo
Cuadrado
16
Conversin de tipos
Conversin explcita: tipos primitivos perdiendo informacin long l = 200; int i = (int)l; conversin de referencias asignar a un objeto de una subclase uno de la superclase cast-down o narrowing No siempre vlido El error se puede producir: en tiempo de ejecucin (ClassCastException) en tiempo de compilacin si no es ni siquiera una subclase.
17
Jerarquas de herencia
Constructores y Herencia
Cuando se declara un obj de una clase derivada, se ejecutan los conts siguiendo el orden de derivacin, es decir, primero el de la clase base, y despus los conts de las clases derivadas de arriba a abajo. Para pasar parmetros al constructor de la clase padre:
super (para1, para2, ..., paraN)
20
Ejemplo de super
class Persona { private String nombre; private int edad; public Persona() {} public Persona (String n, int e) { nombre = n; edad = e; } } class Alumno extends Persona { private int curso; private String nivelAcademico; public Alumno (String n, int e, int c, String nivel) { super(n, e); curso = c; nivel_academico = nivel; } public static void main(String[] args) { Alumno a = new Alumno("Pepe", 1, 2, "bueno"); } }
21