public

Anuncio
Programación Orientada a
Objetos
Herencia
&
Polimorfismo en Java
Angela C. Carrillo Ramos
1
Herencia
Maneja Herencia Simple
Distingue tres tipos de visibilidad:
visibilidad:
pública (public), protegida (protected)
y privada (private).
(private).
"Por default", las clases se derivan
unas de otras en forma pública a
nivel de paquete.
paquete.
Se debe decir explícitamente al
compilador la visibilidad pública,
privada y protegida.
protegida.
2
1
Herencia Simple
class subclase extends superclase
superclase{{
}
3
Herencia Simple
Para “simular
“simular”” Herencia Múltiple se usan
las interfaces
Ejemplo:
Camion
Bus
interface Camion{
}
class Bus{
Chiva
}
class Chiva extends Bus implements
Camion{…}
4
2
Herencia Simple
Una clase sólo puede heredar de una
Superclase
Una clase puede implementar varias
interfaces..
interfaces
Una clase que implementa una
interface debe implementar TODOS
los métodos enunciados en las
interfaces de lo contrario se convierte
en clase abstracta.
abstracta.
5
Clase Abstracta
Clase parcialmente definida
No se puede hacer un new de una
clase abstracta (no tiene instancias)
instancias)
public abstract class nomclass{}
Ej
Ej:: public abstract class Poligono{}
Los métodos que no se van a definir
deben tener el título abstract
privacidad
abstract
tiporetorno
nommetodo (par1
(par1,…,parn)
,parn);;
Ej
Ej:: public abstract float calcularArea();
calcularArea();
6
3
Ejemplo de Herencia
class Punto{
private int x;
private int y;
public Punto () {
x=0;
y=0;
}
public Punto (int x, int y){
this.x=x;
this.y=y;
}
public
public
public
public
int darX(){return x;}
int darY(){return y;}
void cambiarX (int val) {x=val;}
void cambiarY (int val) {y=val;}
}
7
Ejemplo
class Tripleta extends Punto {
int z;
public Tripleta() {
cambiarX(0);
cambiarY(0);
z = 0;
}
public Tripleta(int vx, int vy, int vz) {
cambiarX(vx);
cambiarY(vy);
z = vz; }
int darZ() { return z; }
void cambiarZ(int val)
{ z = val; }
}
8
4
Ejemplo
Cuando creamos un objeto con
Tripleta t = new Tripleta (1, 2, 3);
Se llama al constructor con parámetros
con parámetros de Tripleta.
Una mejora a este método sería:
public Tripleta(int vx, int vy, int vz) {
super (vx,vy);
z = vz;
}
9
Ejemplo
public
public
Tripleta() {
Tripleta() {
cambiarX(0);
z = 0;
cambiarY(0); }
z = 0;
}
public
Tripleta() {
super();
z = 0;
}
10
5
Polimorfismo
Posibilidad de que un método tenga
el mismo nombre y produzca el
mismo efecto básico pero esté
implementado de forma distinta en
las subclases.
subclases.
11
Polimorfismo
Redefinición de métodos
La subclase rere-escribe el método de la
superclase
Cuando una instancia de la subclase
llama el método rere-escrito, llama es su
propia definición
12
6
Polimorfismo
class Superclase{
…
public tipo m1(par1,par2,..,parn){..}
}
class Subclase extends Superclase{
…
public tipo m1(par1,par2,..,parn){..}
}
13
Polimorfismo
Si el método de la subclase necesita
invocar al método de la superclase
se utiliza super
public tipo m1(par1,par2,..,parn){
super.m1(…);
super
.m1(…);
}
14
7
Polimorfismo
Superclase a;
Subclase b;
b = new Subclase(…);
a = b;
a.m1(…); ¿A qué método m1 se llama?
b = (Subclase) a;
b.m1(…); ¿A qué método m1 se llama?
15
Polimorfismo
Para conocer la clase a la cual
pertenece se utiliza instanceOf
Superclase1 obj;
A es subclase de Superclase1
if ((obj
obj instanceof A)
A) // obj pertenece a la
clase A
A a=(A) obj; // Ok, nunca hay error
Siempre debe hacerse el Casting cuando
a un elemento de la subclase se le asigna
un elemento de la superclase
superclase..
16
8
Ejemplo
Rojo r = new Rojo (…);
RojoClaro rc= new RojoClaro (…);
Color c, c1;
c1= new Color (…);
c=r;
c=rc;
c=c1;
r=rc;
r=(Rojo) c;
Color
Rojo
RojoClaro
rc=(RojoClaro) r;
rc=(RojoClaro) c;
17
Contenedor Polimórfico
Clases que contienen objetos de la
clase Object y pueden almacenar
cualquier objeto de sus subclases.
subclases.
Vector
Para crear un vector
Vector v = new Vector();
Adicionar un elemento al Vector
Clase a;
v.addElement(a);
18
9
Contenedor Polimórfico
Obtener un elemento del Vector
Clase a;
a= (Clase) v.elementAt(pos);
Eliminar un elemento de una posición
removeElementAt(pos)
Más documentación:
http://java.sun.com/j2se/1.3/docs/api/java/
util/Vector.html
19
10
Descargar