Documentos de Académico
Documentos de Profesional
Documentos de Cultura
PROGRAMACIÓN AVANZADA
ANGELA CARRILLO RAMOS
CLASE ABSTRACTA
Clase sin instancias
• Atributos: puede o no tener atributos
• Métodos:
• No tiene métodos o algunos de ellos no tienen implementación
• Pueden tener constructor pero no se puede instanciar un objeto
• Se definen como:
public abstract class NomClase{…}
• Los métodos que NO tienen implementación, tienen abstract:
public abstract void nomMetodo(…..);
Como todas las SubClases de Bachiller
redefinen el método estudiar, la clase
Bachiller puede pasar a ser Abstracta
CLASE ABSTRACTA
X
Bachiller
estudiar () Estudian como lo
cumplirActividades() hacían en el colegio
….
}
Una clase es abstracta si:
} • Tiene específicamente un método
abstracto
• Hereda un método abstracto y NO lo
implementa
CONTENEDOR POLIMÓRFICO Sin problema pues a una instancia de la
SuperClase(Bachiller) le están asignando
una instancia de una de sus SubClases, así
Bachiller sea abstracta
List<Bachiller> estudiantes=new ArrayList<Bachiller>();
estudiantes.add (new Cientifico());
estudiantes.add (new Ingeniero());
estudiantes.add (new Ingeniero()); estudiantes
estudiantes.add (new Medico());
C I I M D
estudiantes.add (new Diseñador());
CONTENEDOR POLIMÓRFICO
¿Para recuperar?
• instanceof
• casting
estudiantes
C I I M D
CONTENEDOR POLIMÓRFICO – INVOCACIÓN DE
MÉTODOS
¿Cuántos ingenieros hay?
int cuantos=0;
for (Bachiller b:estudiantes){
if (b instanceof Ingeniero)
cuantos++; estudiantes
}
C I I M D
CONTENEDOR POLIMÓRFICO – INVOCACIÓN DE
MÉTODOS Sólo cuando se tiene en d al Diseñador, es
que se le pueden solicitar sus propios
Se le pide a los Diseñadores que diseñen servicios.
Se debe hacer un casting a Diseñador
for (Bachiller b:estudiantes){ Bachiller no conoce a Diseñador y menos sus
if (b instanceof Diseñador){ servicios.
Diseñador d=(Diseñador) b;
d.diseñar();
estudiantes
}
}
C I I M D
Aunque b se refiere a un Bachiller, en cada
casilla se tiene una instancia de una de sus
INVOCACIÓN DE MÉTODOS subclases y cuando le piden que “estudien”,
se invoca cómo estudia cada una de sus
subclases y más que no tiene
implementación de estudiar() en Bachiller
estudiantes
C I I M D
Los únicos que saben calcular son los
Ingenieros y b al ser Bachiller, no hace
INVOCACIÓN DE MÉTODOS esta tarea, así en la posición 1 y 2 haya
Ingenieros.
}
b.calcular();
X
estudiantes
C I I M D
CONTENEDOR POLIMÓRFICO – INVOCACIÓN DE
MÉTODOS
Sólo cuando se tiene en i al Ingeniero, es
que se le pueden solicitar sus propios
Sólo se le puede pedir a los Ingenieros que calculen servicios.
Se debe hacer un casting a Ingeniero
for (Bachiller b:estudiantes){
Bachiller no conoce a Ingeniero y menos
if (b instanceof Ingeniero){ sus servicios.
Ingeniero i=(Ingeniero) b;
i.calcular();
estudiantes
}
}
C I I M D
CLASE ABSTRACTA
FigGeo
- numLados: int Deja que sus subclases
calculen a su manera
darNumLados()
su área y perímetro
calcularArea ()
calcularPerimetro()