2. Clases abstractas
ING. ROBERTO MARTÍNEZ ROMÁN - RMROMAN@ITESM.MX
Para declarar un método abstracto en una clase,
agrega el modificador abstract y reemplaza el
cuerpo del método con ;
public abstract void leer();
public abstract String generarPago();
Agregue a la clase el modificador abstract.
3. Clases abstractas
ING. ROBERTO MARTÍNEZ ROMÁN - RMROMAN@ITESM.MX
Tome en cuenta lo siguiente:
•Las subclases de una clase abstracta, deben
sobreescribir todos los métodos abstractos de la
superclase (si no, deben declararse abstractas)
•No se pueden crear instancias de una clase
abstracta.
•Proporciona recursos para la subclase y
declaración de métodos que pueden ser usados
por el polimorfismo.
4. La clase abstracta Animal
public abstract class Animal // NO se puede instanciar
{
protected String comida;
private int hambre; // [0, 5], 0 no tiene hambre
public Animal(String comida, int hambre) {
this.comida = comida;
this.hambre = hambre;
}
public abstract void hablar(); // Obliga a la subclase a sobrescribir este método
public void comer() {
if (hambre>0) {
hambre--;
}
}
ING. ROBERTO MARTÍNEZ ROMÁN - RMROMAN@ITESM.MX
5. Interfaces
ING. ROBERTO MARTÍNEZ ROMÁN - RMROMAN@ITESM.MX
• Las interfaces, son como clases abstractas puras.
• Contiene únicamente datos estáticos constantes y
métodos abstractos públicos.
• Una clase 'implementa' una interface, más que
extenderla.
• Decimos que la clase implementa la interface si
sobrescribe todos los métodos definidos en esta
última.
6. Equivalencia de clases e interfaces
ING. ROBERTO MARTÍNEZ ROMÁN - RMROMAN@ITESM.MX
public abstract class ClaseAbstr
{
public static final int M=10;
public abstract void a();
}
public interface Equivalente
{
int M=10;
void a();
}
Una clase abstracta pura. No hay variables
de instancia y sólo hay métodos
abstractos.
Una interface define SOLO datos
estáticos constantes públicos y
métodos abstractos públicos.
7. Implementado interfaces
ING. ROBERTO MARTÍNEZ ROMÁN - RMROMAN@ITESM.MX
public abstract class ClaseAbstr
{
public static final int M=10;
public abstract void a();
}
public interface Equivalente
{
public static final int M=10;
public abstract void a();
}
public class A extends ClaseAbstr
{
public void a() { ... }
}
public class B implements Equivalente
{
public void a() { ... }
}
8. Diagrama UML para interfaces
ING. ROBERTO MARTÍNEZ ROMÁN - RMROMAN@ITESM.MX
9. Interfaces
ING. ROBERTO MARTÍNEZ ROMÁN - RMROMAN@ITESM.MX
Podemos declarar referencias del tipo de la
interface (pero nunca crear objetos de ella) y
asignar objetos de las clases que la implementan,
con esto logramos el polimorfismo.
FormaGeometrica figura;
figura = new Forma2D();
figura.area(); // polimorfismo
figura = new Forma3D();
figura.area(); // polimorfismo
10. Jerarquías de clases e interfaces
ING. ROBERTO MARTÍNEZ ROMÁN - RMROMAN@ITESM.MX
Las interfaces extienden interfaces, las clases
extienden clases y las clases implementan interfaces
public interface A
{
…
}
public interface B extends A
{
…
}
public class C implements A, B
{
…
// Obligado a sobrescribir
// los métodos de A y B
}
public class D extends C
{
…
}
public class E extends D
implements A, B
{
…
}
11. Jerarquías de clases e interfaces
ING. ROBERTO MARTÍNEZ ROMÁN - RMROMAN@ITESM.MX
Las clases pueden implementar múltiples interfaces,
pero sólo pueden heredar de una clase.
Boton Dibujable
Oprimible
BotonMenu
12. Clases e interfaces
La superclase define lo que es la subclase.
La interface define lo que puede hacer (el rol que juega) la subclase.
public class JuegoAhorcado extends JFrame implements ActionListener
{
}
public class Moneda extends Item implements Recolectable
{
}
ING. ROBERTO MARTÍNEZ ROMÁN - RMROMAN@ITESM.MX
13. Tarea
Terminar el ejercicio iniciado en clase (Figura, IFigura, Circulo):
Agregar:
1. Triángulo
2. Rectángulo
Implementar una interfaz gráfica que permita:
1. Agregar una figura de los tres tipos
2. Mover TODAS las figuras al mismo tiempo
3. Escalar todas las figuras al mismo tiempo
ING. ROBERTO MARTÍNEZ ROMÁN - RMROMAN@ITESM.MX
14. Segunda parte de la práctica
sobre Cuentas de Banco
Agrega a la clase de prueba PruebaCuentas, los siguientes métodos para
procesar cuentas:
mostrarDatos. Imprime el saldo de la cuenta que llega como
parámetro.
private static void mostrarDatos(CuentaBanco cuenta){}
hacerCorteMensual. Actualiza la cuenta que llega como parámetro,
agregando los intereses ganados o cobrando la comisión por las
operaciones efectuadas.
private static void hacerCorteMensual(CuentaBanco cuenta){}
ING. ROBERTO MARTÍNEZ ROMÁN - RMROMAN@ITESM.MX