Está en la página 1de 29

Universidad El Bosque

Programa: Ingeniería de Sistemas

Interfaces, sobreescritura y sobrecarga

PROGRAMACIÓN 1
2021-10
INTERFACES
Permiten enunciar un conjunto de constantes y de cabeceras de
métodos abstractos; éstos deben implementarse en las clases y
constituyen la interfaz de la clase.

Es una forma de declarar que todos los métodos de una clase


son públicos y abstractos

Con ello se especifica el comportamiento común de


todas las clases que implementen la interfaz
Declaración
Su declaración es similar a
la de una clase; en la
cabecera se utiliza la
palabra reservada
interface en vez de class

La interfaz NodoG define tres No debe especificarse ni abstract


métodos abstractos y además
públicos.
 ni public ya que todos los
métodos de interface lo son.
Sintaxis
REGLA para manejo de Interfaces

En interface todos los métodos declarados son, de


manera predeterminada, públicos y abstractos;
por ello no está permitido precederlos de
modificadores.
Ejemplo Aplicación Interfaces

Esta interfaz muestra los métodos que todo


árbol B debe implementar.
Implementación de una Interfaz (Interface)
Definición de especificación de un comportamiento común que
tiene un conjunto de clases.

Sigue la misma sintaxis a la derivación o extensión de una clase.

Cambia la palabra reservada de extends a implements


REGLA de implementación
La clase que implementa la interfaz tiene que
especificar el código (la implementación) de cada
uno de sus métodos.
De no hacerlo, la clase se convierte en
abstracta y debe declararse abstract; esto es
una forma de obligar a que cada método de la
interfaz se implemente.
Considérese una jerarquía de
Ejemplo barcos: BarcoPasaje, PortaAvión y
Pesquero. Todos tienen como
comportamiento común
mensageSocorro() y alarma()
Se declara la interfaz Barco:
interface Barco
{
void alarma();
void msgeSocorro(String av);
}

Las clases BarcoPasaje, PortaAvion y Pesquero


implementan la interfaz Barco y además definen sus métodos.
Considérese una jerarquía de
Ejemplo barcos: BarcoPasaje, PortaAvión y
class BarcoPasaje implements Barco Pesquero. Todos tienen como
{ comportamiento común
private int eslora; mensageSocorro() y alarma()
private int numeroCamas = 101;
public BarcoPasaje()
{
System.out.println("Se crea objeto BarcoPasaje.");
}
public void alarma()
{
System.out.println("¡¡¡Alarma del barco
pasajero!!!");
}
public void msgeSocorro(String av)
{
alarma();
System.out.println("¡¡¡SOS SOS!!!" + av);
}
}
Considérese una jerarquía de
Ejemplo barcos: BarcoPasaje, PortaAvión y
class PortaAvion implements Barco Pesquero. Todos tienen como
{ comportamiento común
private int aviones = 19; mensageSocorro() y alarma()
private int tripulacion;
public PortaAvion(int marinos)
{
tripulacion = marinos;
System.out.println("Se crea objeto PortaAviones.");
}
public void alarma()
{
System.out.println("¡¡¡marineros a sus
puestos!!!");
}
public void msgeSocorro(String av)
{
System.out.println("¡¡¡SOS SOS!!! " + av);
}
}
Considérese una jerarquía de
Ejemplo barcos: BarcoPasaje, PortaAvión y
class Pesquero implements Barco Pesquero. Todos tienen como
{
private int eslora;
comportamiento común
private double potencia; mensageSocorro() y alarma()
private int pescadores;
String nombre;
public Pesquero(int tripulacion)
{
pescadores = tripulacion;
System.out.println("Se crea objeto Barco Pesquero.");
}
public void alarma()
{
System.out.println("¡¡¡Alarma desde el pesquero " +
nombre + " !!!");
}
public void msgeSocorro(String av)
{
System.out.println("¡¡¡SOS SOS!!!, " + av);
}
}
Múltiples Interfaces
Java no permite que una clase derive de dos o más
clases, es decir, no permite la herencia múltiple.

Sin embargo, una clase sí puede implementar más


de una interfaz y tener el comportamiento común
de varias de ellas
Múltiples Interfaces: Sintaxis

Una clase implementa tantas interfaces como se


desee; todos los métodos se deben implementar
Regla como public debido a que Java no permite
reducir la visibilidad de un método cuando se
sobreescribe.
Jerarquía de Interfaces
Las interfaces se pueden organizar de forma jerárquica, de forma
que los métodos sean heredados

A diferencia de las clases que sólo pueden heredar de


una clase base (herencia simple), las interfaces pueden
heredarse tanto como se precise
Herencia de clases e Implementación de
interfaces
Las interfaces no son clases porque especifican un
comportamiento mediante métodos para la clase que las
implementa

Por ello, una clase puede heredar de su clase base y a la vez


implementar una interfaz
Ejemplo y Sintaxis

Una clase puede heredar de otra clase e


implementar una interfaz; primero se debe
Regla especificar la clase de la que hereda (extends)
y después la interfaz que implementa
(implements).
Instanciación de Objetos

Las interfaces NO SON CLASES

Sí se pueden declarar variables del mismo tipo y que cualquier


variable de una clase que implementa un interface se puede
asignar a una variable del tipo del interface.
Instanciación de Objetos
interface Bolsa
{
Bolsa insertar (Object elemento);
}
public class Bolsa1 implements Bolsa
Bolsa q;
{ q = new Bolsa1();
public Bolsa insertar(Object e) { ... } q.insertar("Manzana");
} ...
public class Bolsa2 implements Bolsa q = new Bolsa2();
{ q.insertar(Integer(5));
public Bolsa insertar(Object e) { ... }
}
Representación
UML
Sobrecarga de métodos
public void sumar(int a, int b)
{
int suma=a+b;
System.out.println("la suma es: "+suma);
}

public void sumar(double a, double b)


{
double suma=a+b;
System.out.println("la suma es: "+suma);
}

Y, ¿No es igual? ….. ¿para qué sobrecargar si en ultimas se crea


el mismo número de métodos?
Sobrecarga de métodos

La sobrecarga de métodos es la creación de varios métodos con el


mismo nombre pero con diferente lista de tipos de parámetros.

Java utiliza el número y tipo de parámetros para seleccionar cuál


definición de método ejecutar.

Java diferencia los métodos sobrecargados con base en el


número y tipo de parámetros o argumentos que tiene el
método y no por el tipo que devuelve.
Sobrecarga de métodos
Y ….¿qué hay de tener dos (2) constructores en una
misma clase?

Algunas veces hay una necesidad de inicializar un objeto de diferentes


maneras. Esto se puede hacer usando la sobrecarga de
constructor. Hacerlo le permite construir objetos de varias maneras.
Ejemplo Sobrecarga de Constructor
Sobreescritura de métodos
Así como en la sobrecarga nos fijamos en los parámetros, en
la sobreescritura nos debemos fijar en que la estructura del
método sea igual a la de su superClase, no solo el mismo nombre
sino el mismo numero de argumentos y tipo de retorno (o al menos
un subtipo de este)

Algo que también debemos mencionar es que podemos identificar un


método sobreescrito cuando tiene la anotación @override, esto es muy
común encontrarlo cuando trabajamos con clases abstractas o interfaces
Ejercicio No. 1 en Clase
Considere la implementación de la interfaz llamada Series:
public interface Series
{
int getSiguiente(); //Retorna el siguiente número de la serie
void reiniciar(); //Reinicia
void setComenzar(int x); //Establece un valor inicial
}

Cree una clase llamada DeDosEnDos, que genera una serie de


números, cada uno mayor que el anterior (de 2 en 2).
Cree su clase Lanzadora
class Lanzador { Ejercicio1 donde implemente un
public static void main(String[] args) { Main que imprima el siguiente
DeDosEnDos ob=new DeDosEnDos();
for (int i=0;i<5;i++) código de impresión:
{
System.out.println("Siguiente valor es: "+ob.getSiguiente());
}
System.out.println("\nReiniciando");
ob.reiniciar();
for (int i=0;i<5;i++)
{
System.out.println("Siguiente valor es: "+ob.getSiguiente());
}
System.out.println("\nIniciando en 100");
ob.setComenzar(100);
for (int i=0;i<5;i++)
{
System.out.println("Siguiente valor es: "+ob.getSiguiente());
}
}
}
Ejercicio No. 2 en Clase
Considere la implementación de la misma interfaz llamada Series:
public interface Series
{
int getSiguiente(); //Retorna el siguiente número de la serie
void reiniciar(); //Reinicia
void setComenzar(int x); //Establece un valor inicial
}

Cree ahora una clase llamada DeTresEnTres, que genera una serie
de números, cada uno mayor que el anterior (de 3 en 3).
Cree una clase Lanzadora Ejercicio2
donde implemente un Main que
imprima el siguiente código de
impresión:
class SeriesDemo {
public static void main(String[] args) {
DeDosEnDos dosOb=new DeDos();
DeTresEnTres tresOb=new DeTres();
Series ob;
for (int i=0;i<5;i++) {
ob = dosOb;
System.out.println("Siguiente valor DeDos es: " + ob.getSiguiente());
ob = tresOb;
System.out.println("Siguiente valor DeTres es: " + ob.getSiguiente());
}
}
}

También podría gustarte