Java 15
Java 15
Generation/
Curso JAVA (Online-Nacional) 3ªEd.
Java Bootcamp
Eduardo Corral Muñoz
[email protected]
Programación
Orientada a
Objetos 3
Índice
_01 Herencia
_02 Heredando métodos
Polimorfismo
_03 Abstracción
Clases abstractas
_04 Clases internas
01
Herencia
Herencia
En la vida real, los descendientes heredan de sus ascendientes
características como rasgos físicos, color de ojos, de pelo, altura,
complexión, color de piel, … y comportamientos como
habilidades (deporte), gustos, preferencias …
En Java, la herencia también es una relación de parentesco entre
dos clases, una es padre y la otra hija. La hija hereda los
atributos y métodos del padre (y de todos los ascendientes).
Es el mecanismo OOP para establecer relaciones jerárquicas
entre clases. Es uno de sus fundamentos.
Una subclase, clase hija, hereda atributos y métodos de todos
sus ancestros.
Es una de las bases de reutilización de código.
La herencia solo es aplicable cuando existe una relación “familiar”
entre las clases.
Herencia
El concepto de herencia se divide en dos grupos:
• subclass – subclase (child) – la clase que hereda de otra
• superclass - superclase (parent) – de la que se hereda
Permite la reusabilidad del código. Reutilizamos atributos y
métodos de una clase existente en una clase nueva.
Si la superclase necesita proteger sus atributos se utiliza el
modificador protected en lugar de private para poder heredarlo.
Si deseamos evitar que una clase sea heredable utilizaremos la
palabra clave final.
En los diagrmas UML se indica la herencia con la “flecha blanca”.
Herencia
Para heredar de una clase se usa la palabra clave extends.
class Vehiculo { // Clase Padre = Superclase
protected String marca = "Ford";
public void claxon() {
System.out.println("Tuut, tuut!");
}
}
Heredando métodos
Polimorfismo
Polimorfismo
Polimorfismo = múltiples formas.
Se produce cuando tenemos múltiples clases que están
relacionadas entre sí por herencia.
El polimorfismo utiliza los métodos heredados de una superclase
para realizar diferentes tareas mediante sobrecarga de métodos,
añadiendo nuevos parámetros y/o cambiando el tipo del propio
método. Esto nos permite realizar un sola acción de diferentes
maneras.
Herencia y polimorfismo permiten la reusabilidad del código.
Reutilizamos atributos y métodos de una clase existente en una
clase nueva sin alterarlos en la clase padre.
Polimorfismo
// superclase
public class Animal{
public void sonido(){
System.out.println(“El animal emite un sonido”);
}
}
// subclases
class Cerdo extends Animal{
public void sonido(){
System.out.println(“El cerdo dice: güi güi”);
}
}
class Perro extends Animal{
public void sonido(){
System.out.println(“El perro dice: guau guau”);
}
}
Polimorfismo
// main
class SonidoAnimal {
public static void main(String[] args) {
Animal miAnimal = new Animal();
Cerdo miCerdo = new Cerdo();
Perro miPerro = new Perro();
miAnimal.sonido();
miCerdo.sonido();
miPerro.sonido();
}
}
super - constructores
La palabra reservada super permite acceder al método
constructor de una clase padre (superclase) desde un clase hija
(subclase). Debe invocarse como primera línea del constructor de
la clase hija.
// superclase
public class Persona{
protected String nombre;
protected String apellido;
// constructor padre
public Persona(String nombre, String apellido){
this.nombre = nombre;
this.apellido = apellido;
}
}
super - constructores
// subclase
public class Alumno extends Persona{
private String centro;
// constructor hija
public Alumno(String nombre, String apellido, String centro ){
super(nombre, apellido);
this.centro = apellido;
}
}
super - métodos
La palabra reservada super también nos permite acceder a los
métodos de una clase padre (superclase) desde un clase hija
(subclase). Debe invocarse como primera línea del método de la
clase hija.
// superclase
public class Persona{
protected String nombre;
protected String apellido;
// constructor padre
public metodoPersona(){
….
}
}
Sobreescritura de métodos
La herencia también nos permite sobreescribir métodos
heredados del padre, redefiniéndolos en la clase hija sin afectar a
la clase padre.
// superclase
public class Persona{
private String nombre;
private String apellido;
// método padre
public void metodoDelPadre(){
…
}
}
// subclase
public class Alumno extends Persona{
private String centro;
private Float calificacion;
Abstracción
Clases abstractas
Abstracción
La abstracción de datos es el proceso de ocultar determinados
detalles y mostrar al usuario solamente la información esencial.
Se puede conseguir con clases e interfaces abstractos.
El modificador abstract es un modificador de no-acceso utilizado
para clases y métodos.
abstract class: clase restringida con la que no se pueden crear
objetos, debe ser heredada por otra clase para acceder. Si se
intenta instanciar un objeto con ellas, se produce un error.
abstract method: solo se pueden usar en clases abstractas, no
tienen cuerpo hasta que se define en la subclase donde ha sido
heredado.
Una clase abstracta puede contener tanto métodos abstractos
como normales.
Clases abstractas
Es una clase que representa un concepto genérico (abstracto)
que no debe ser ejemplarizado.
Tenemos una jerarquía en las que todas la clases tienen un
método común, pero se implementa de forma diferente en cada
una de ellas, lo sobreescribimos en todas ellas.
Una clase abstracta está diseñada para ser una superclase.
No pueden ser instanciadas, solo heredadas.
Clases abstractas
Creando una clase abstracta
abstract class Persona{
protected String nombre;
protected String apellido;
protected String email;
…
// métodos abstractos
abstract public void registro();
abstract public void editar();
abstract public void borrar();
// métodos normales
public String nombeCompleto(){
return this.nombre + “ “ + this.apellido;
}
}
Clases abstractas
Creando otras clases abstractas
abstract class figuraGeometrica{
// métodos abstractos
abstract public void perimetro();
abstract public void area();
abstract public void dibujar();
}
@Override
public void area() (){
// cálculo del área del triangulo
}
…
}
04
Clases internas
Clases internas – Inner Class
Podemos crear clases anidadas (clases dentro clases).
El objetivo de las clases anidadas es agruparlas, haciendo el
código más fácil de entender y mantener.
Para acceder a una clase interna, creamos un objeto de la clase
externa y, a continuación, creamos un objeto de la clase interna.
Clases internas – Inner Class
Clases anidadas:
class OuterClass {
int x = 10;
class InnerClass {
int y = 5;
}
}