Está en la página 1de 22

RMS

UD7

UD7.- Herencia y Polimorfismo

16/01/2023 A
RMS
UD7

POO: Herencia

16/01/2023
Herencia
Definición
Capacidad de crear clases que adquieran de manera automática los miembros (atributos y métodos) de otras
clases que ya existen, pudiendo al mismo tiempo añadir atributos y métodos propios.

La clase que va a ser heredada se la llama superclase o


SUPERCLASE
clase base, mientras que a la que hereda se la conoce
Clase Base
como subclase o clase derivada.
Gráficamente, la herencia entre dos clases se representa
con una flecha saliendo de la subclase hacia la superclase.

SUBCLASE
Clase Dervivada
Herencia (II)

Reglas
 En Java no está permitida la herencia múltiple, es decir, una subclase no
puede heredar más de una clase.
 Sí es posible una herencia multinivel, es decir, A puede ser heredada por B y Clase A
C puede heredar B.
 Una clase puede ser heredada por varias clases.

Clase A Clase B Clase B


Clase A

Clase C

Clase C Clase B Clase C


Creación de Herencia en Java

Declaración de las clases


 Todas las clases de Java heredan
public class superclase alguna clase.
{  En caso de que no se especifique
//código de la superclase
} mediante extends la clase que se va a
heredar, implícitamente se heredará
Object.
public class subclase extends superclase
{  Esta clase se encuentra en el paquete
//código de la subclase
java.lang y proporciona el soporte
}
básico para cualquier clase Java.
Creación de Herencia en Java
Constructores de las clases
class Primera{  Cada vez que en Java se crea un
public Primera() {
System.out .println {"Constructor Superclase”); objeto de una clase, antes de
} ejecutarse el constructor de dicha
} // Primera
class Segunda extends Primera{ clase se ejecutará primero el de su
public Segunda() { superclase.
System.out.println (“Constructor subclase”);
}  El compilador Java añade siempre,
} // Segunda como primera línea en todos los
constructores de una clase, la
public class Principal{
instrucción:
public static void main (String[] args) {
Segunda s=new Segunda(); super ();
}
} // Principal
Creación de Herencia en Java
SobreEscritura y Sobrecarga
class Vehiculo{
public Vehiculo() {
System.out .println {"Constructor Superclase”);
}
public void arrancar(){
System.out .println {“Arranca Vehículo”);
}
} // Vehiculo
class Coche extends Vehiculo{
public Coche() { Sobreescritura
System.out.println (“Constructor subclase”);
}
public void arrancar(){
System.out .println {“Arranca Coche”);
}
public void arrancar(String s){ Sobrecarga
System.out .println {“Arranca Coche”);
}
} // Coche
Ejercicio

Publicación 1. Crea las clases que aparecen a la izquierda


2. Crea una clase PruebaLibro, en ella se instanciará un libro, se asignarán
valores a los atributos y se mostrará el libro por pantalla.
+ NumeroDePaginas: int;
+ Precio: float; NombreAutor: Frederick Forsyth
Título: El manifiesto negro
Editorial: Círculo de lectores
TipoPortada: Dura
Páginas: 757
3. Añade los siguientes métodos a la clase Publicación:
public int DimeNumeroDePaginas(){…}
Libro public void PonNumeroDePaginas(int NumeroDePaginas){…}
public float DimePrecio(){...}
+ Titulo: String; public void PonPrecio(float Precio){…}
+ TipoPortada : String;
+ ISBN : String;
+ NombreAutor: String; La nomenclatura es opcional, se puede seguir utilizando el método estándar
+ Editorial : String;
getAccion para leer valores y setAccion para escribir valores.
Ejercicio

Publicación 4. Añade una clase Periodico que hereda de publicación, los atributos
propios on:
private String Nombre;
+ NumeroDePaginas: int; private String Fecha;
+ Precio: float;
Caso práctico

Periodico

Realizar el ejercicio que se ha subido a la unidad 7 del aula virtual:


+ Nombre: String;
+ Fecha : String;
Biblioteca Digital Básica
RMS
UD7

POO: Clases Abstractas

24/01/2023
Clases Abstractas
Definición
Una clase abstracta es una clase en la que alguno de sus métodos está declarado, pero no está definido, es
decir, se especifica su nombre, parámetros y tipo de devolución, pero no incluye código. A este tipo de
métodos se les conoce como métodos abstractos.

Un método se define como abstracto porque en ese


SUPERCLASE
momento no se conoce como ha de ser su
Clase Abstracta
implementación.

 No es posible crear métodos de una clase abstracta

 La subclase está obligada a sobreescribir TODOS los


SUBCLASE
métodos abstractos que heredan
Clase Dervivada
Creación de clases abstractas en Java

Declaración de una clase abstracta

public abstract class Figura {

private String color;


public Figura (String c) {
color=c;
}
public String getColor(){
return color;
}
public abstract double area();

};
Creación de clases abstractas en Java

Declaración de las subclases

public class Triangulo extends Figura{ public class Circulo extends Figura{

private int base, altura; private int radio;

public Triangulo (int b,int a, String c) {


super(c); public Circulo (int r, String c){
base=b; super (c);
altura=a; radio=r ;
} }
public double area() { public double area(){
return base*altura/2 ; return Math.PI*radio*radio;
} }
public int getBase(){ public int getRadio(){
return base; return radio;
} }
public int getAltura(){
return altura;
} } // class Circulo
} // class figura
RMS
UD7

POO: Polimorfismo

26/01/2023
Polimorfismo en Java
Puesta en contexto
En Java, es posible asignar un objeto de una clase a una variable de su superclase. Esto es aplicable, incluso,
cuando la superclase es una clase abstracta.

Por ejemplo, dada una variable de tipo Figura: Figura f;


Es posible asignar a esta variable un objeto Triángulo: f=new Triangulo(...);

f.getColor(); //getColor() de Figura


A partir de aquí, puede utilizarse esta variable
para invocar a aquellos métodos del objeto que f.area(); //área() de Triangulo, también
también estén definidos o declarados en la definido en la superclase

superclase, pero no a aquéllos que sólo existan f.getBase(); //error de compilación invoca
en la clase a la que pertenece el objeto. método de Triangulo

f.getAltura(); //error de compilación


invoca método de Triangulo
Polimorfismo en Java
¿Qué utilidad puede tener asignar un objeto a una variable de su superclase para llamar a sus métodos,
cuando eso mismo podemos hacerlo si le asignamos a una variable de su propia clase?

Sería posible almacenar Figura f; ¡ La misma instrucción


en una variable Figura f=new Triangulo (..); f.area() permite llamar a
f.area(); //Método área de Triangulo
cualquier objeto de sus distintos métodos area(),
f=new Circulo(..);
subclases, es decir, f.area(); //Método área de Circulo dependiendo del objeto
objetos Triángulo, Círculo f=new Rectangulo(..); almacenado en la variable
o Rectángulo: f.area(); //Método área de Rectángulo f!

Definición de Polimorfismo
"La posibilidad de utilizar una misma expresión para invocar a diferentes versiones de un mismo
método, determinando en tiempo de ejecución la versión del método que se debe ejecutar".
Polimorfismo en Java
Ventaja
REUTILIZACIÓN DE CÓDIGO:

El hecho de que utilizando una variable de public class GestionaFiguras{


una clase pueda escribirse una única public static void main(String[] args) {
instrucción que sirva para invocar a
diferentes versiones del mismo método, //**********************Triángulo
permitirá agrupar instrucciones de este tipo mostrar (new Triangulo (5,7, “verde”));
en un bloque de código para que pueda ser //**********************Círculo
ejecutado con cualquier objeto de las mostrar (new Circulo (4,”azul”));
subclases. //**********************Rectángulo
mostrar (new Rectangulo (3,2, "naranja"));
}
public static void mostrar (Figura f){
//Se pueden utilizar con cualquier subclase de Figura
System.out.println (“E1 color de la figura
es”+f.getColor());
System.out.println (“El área de la figura es”+f.area() ) ;
}
} //GestionFiguras
RMS
UD7

POO: Interfaces

31/01/2023
Interfaces

Definición

 Conjunto de métodos abstractos y de constantes públicas definidos en un archivo .java.


 Una interfaz es 'como' a una clase abstracta llevada al límite.

Consideraciones

 Todos los métodos definidos en una interfaz son públicos y abstractos, aunque no se indique
explícitamente.
 En una interfaz es posible definir constantes,las cuales son, implícitamente, públicas y estáticas.
 Una interfaz no es una clase. Las interfaces tan sólo pueden contener lo que ya se ha comentado:
métodos abstractos y constantes. No pueden contener métodos con código, constructores o variables.
Interfaces

Declaración

[public] interface Nombre_interfaz {

//Constantes y métodos abstractos

tipo metodo1 (argumentos);


tipo metodo2 (argumentos);

}
Ejemplo

El objetivo de las interfaces es proporcionar un formato public interface Operaciones{


común de métodos para las clases. public static final double p=4.5;
void rotar();
String serializar();
}
Implementación de interfaces
public class Triangulo implements Operaciones {
En la definición de una clase, se public void rotar () {
utiliza la palabra implements para //implementación del método
indicar qué interfaz se ha de }
implementar: public String Serializar ( ) {
//implementación de método
}
}

 Cuando una clase implementa una interfaz, está


public class Míclase extends Superclase implements
obligada a definir el código (implementar) de Interfaz1, Interfaz2 {}
todos los métodos existentes en la misma.
 Una clase puede implementar más de una
interfaz, en cuyo caso, deberá implementar los public interface Milnterfaz extends Interfazl, Interfaz2
métodos existentes en todas las interfaces {}
 Una clase puede heredar otra clase e
implementar al mismo tiempo una o varias Si la clase Triángulo quisiera tener los métodos rotar() y serializar(),
interfaces. podría implementar la interfaz Operaciones y seguir heredando la
 Una interfaz puede heredar otras interfaces. clase Figura
Interfaces y Polimorfismo

Al igual que con las clases Una variable de tipo interfaz puede almacenar
abstractas, el principal objetivo que cualquier objeto de las clases que la implementan,
persiguen las interfaces con la pudiendo utilizar esta variable para invocar a los
definición de un formato común de métodos del objeto que han sido declarados en la
métodos es el polimorfismo interfaz e implementados en la clase:

Operaciones op = new Triangulo();


op.rotar();
op.serializar();

También podría gustarte