PDF de programación - 6. Herencia. Clases abstractas

Imágen de pdf 6. Herencia. Clases abstractas

6. Herencia. Clases abstractasgráfica de visualizaciones

Actualizado el 21 de Marzo del 2018 (Publicado el 1 de Diciembre del 2017)
1.020 visualizaciones desde el 1 de Diciembre del 2017
329,6 KB
16 paginas
Creado hace 18a (07/11/2005)
6. Herencia. Clases abstractas. Genericidad

• Clase Object
• Polimorfismo y ligadura dinámica
• super
• Herencia y creación
• Clases abstractas
• Genericidad

1

Herencia en Java

• Herencia simple
• Object es la clase raíz (paquete java.lang)
• Object describe las propiedades comunes a todos los objetos

Object

A

B

C

D

Terminología:

- C y D son subclases de B
- B es la superclase de C y D

El lenguaje de programación Java

2

1

Herencia en Java

• Una subclase hereda de su superclase métodos y variables tanto
de clase como de instancia.
• Una subclase puede añadir nuevos métodos y variables.

• Una subclase puede redefinir métodos heredados.
• Sintaxis:class nombreHija extends nombrePadre {…}
• Por defecto toda clase extiende la clase Object
class Contador {…} ⇔class Contador extends Object {…}

El lenguaje de programación Java

3

Ejemplo
public class ContadorColoreado extends Contador {

//nueva variable de instancia
private String color ;
public ContadorColoreado(){

super();
setColor(“transparente”);

Llamada al

constructor del

padre

}
public ContadorColoreado(int v, int s, String c) {

super(v,s);
setColor(c);

Object

Contador

}
...

}

ContadorColoreado

El lenguaje de programación Java

4

2

Acceso protegido
• Una subclase no puede acceder a los campos privados de

la superclase

• Para permitir que un método de la subclase pueda acceder

a un campo de la superclase, éste tiene que declararse
como protected

• Protected: miembros visibles a las subclases y al resto

de clases del paquete

• Resumen de modificadores de acceso:

– private
– public
– protected
– Sin modificador –visible en el paquete

–visible sólo en la clase
–visible a todas las clases
–visible en el paquete y las subclases

El lenguaje de programación Java

5

Conversión de tipos
• Java es un lenguaje fuertemente tipado, es decir, en tiempo

de compilación se comprueba la compatibilidad de tipos

• Conversión implícita: (automática)

– tipos primitivos a uno que soporte un rango mayor de valores

float saldo = 300; //podemos asignarle un entero
int codigo = 3.7; //ERROR

– conversión de referencias: todo objeto es compatible con sus

superclases
• cast-up
• siempre válido
Rectangulo r;
Cuadrado c = new Cuadrado();
r = c;

Rectangulo

Cuadrado

6

3

Conversión de tipos

• Conversión explícita:

– tipos primitivos perdiendo información

long l = 200;
int i = (int)l;

– conversión de referencias asignar a un objeto de una subclase

uno de la superclase
• cast-down o narrowing
• No siempre válido
• El error se puede producir:

– en tiempo de ejecución (ClassCastException)
– en tiempo de compilación si no es ni siquiera una subclase.

7

Conversión explícita de referencias

• Puede dar un error en ejecución:

Figura [] figuras = new Figura [30];

Rectangulo r = (Rectangulo)figuras[i];

• Comprobar el tipo antes de la conversión:

if (figuras[i] instanceof Rectangulo)

r = (Rectangulo)figuras[i]

• Daría error en compilación:

Cuenta c = (Cuenta)figuras[i];

El lenguaje de programación Java

8

4

Redefinición

• Un método de la subclase con la misma signatura y valor
de retorno que un método de la superclase lo está
REDEFINIENDO.

• Para evitar la redefinición de un método se utiliza el

modificador final.

• Puede cambiar el valor de acceso siempre que lo relaje,
es decir, puede pasar de protected a public pero no a
private.

• Los atributos no se pueden redefinir, sólo se OCULTAN (el
campo de la superclase todavía existe pero no se puede
acceder)

El lenguaje de programación Java

9

public class Poligono{
private Punto [] vertices;
Ejemplo redefinición
private int numVertices;

public float perimetro(){ //{α}
double peri=0;
Punto anterior=vertices[0];
Punto actual;
int ultimo=numVertices-1;
for (int i=1; i<=ultimo; i++){

actual=vertices[i];
peri+=anterior.distancia(actual);
anterior=actual;

}
//distancia del ultimo con el primero
return peri+=vertices[ultimo].distancia(vertices[0]);

}

}

}
public class Rectangulo{ //{β}

private double lado1;
privare double lado2;

public float perimetro(){
return 2*lado1+2*lado2;
}

Añade atributos

Redefine métodos

El lenguaje de programación Java

10

5

Polimorfismo y ligadura dinámica

• Polimorfismo: una entidad puede hacer referencia a objetos

de diferentes tipos en tiempo de ejecución.

• Ligadura dinámica: en tiempo de ejecución se elegirá la

versión mas adecuada según el tipo del objeto receptor.

• Sea la jerarquía:

Object

Poligono

perimetro+ {α}

Rectangulo

perimetro++ {β}

Poligono p;
/*

Puede referenciar a un objeto
Poligono o Rectangulo

*/
Rectangulo r = new Rectangulo();
p=r;
float peri = p.perimetro();

{β}

El lenguaje de programación Java

11

super

• Palabra clave disponible en todos los métodos no-static
• Se invoca a la versión del método de la primera superclase

que lo contenga

• Ejemplo:

public class Punto{

… //(x,y)
public void borrar(){}

}
public class Pixel extends Punto{

El lenguaje de programación Java

12

6


public void borrar(){

super.borrar(); //borra el Punto
color = null;

}

}

Ejemplo super
class Uno {

public int test(){return 1;}
public int result1(){return this.test();}

}
class Dos extends Uno{
}
class Tres extends Dos{

public int test(){return 2;}

Uno

Dos

Tres

Cuatro

public int result2(){return this.result1();}
public int result3(){return super.test();}

}
class Cuatro extends Tres{
}

public int test(){return 4;}

El lenguaje de programación Java

13

Herencia. ‘super’

public class PruebaSuperThis{

public static void main (String args[]){

Uno ob1 = new Uno();
Dos ob2 = new Dos();
Tres ob3 = new Tres();
Cuatro ob4 = new Cuatro();

System.out.println("ob1.test = "+ ob1.test());
System.out.println("ob1.result1 = " + ob1.result1());
System.out.println("ob2.test = " + ob2.test());
System.out.println("ob2.result1 = " + ob2.result1());
System.out.println("ob3.test = " + ob3.test());
System.out.println("ob4.result1 = " + ob4.result1());
System.out.println("ob3.result2 = " + ob3.result2());
System.out.println("ob4.result2 = " + ob4.result2());
System.out.println("ob3.result3 = " + ob3.result3());
System.out.println("ob4.result3 = " + ob4.result3());

El lenguaje de programación Java

}

}

1
1
2
2
2
4
2
4
2
2

14

7

Clases abstractas

• Se fija un conjunto de métodos y atributos que permitan
modelar un cierto concepto, que será refinado mediante la
herencia.

• Métodos abstractos:

– sólo cuentan con la declaración y no poseen cuerpo de definición
– la implementación es específica de cada subclase

• Toda clase que contenga algún método abstracto (heredado
o no) es abstracta. Puede tener también métodos efectivos.

• Tiene que derivarse obligatoriamente
• NO se puede hacer un new de una clase abstracta. SI

deben definir los constructores.

El lenguaje de programación Java

15

Ejemplos

• public abstract class Figura {
public abstract void dibujar();
public abstract void rotar();
...

}
public class Rectangulo extends Figura {

public void dibujar(){

//código especifico para dibujar rectángulos
...

}
...

}

• Clases abstractas en Java: Number y Dictionary

16

8

Herencia. Clase Object
• Todas las clases heredan directa o indirectamente de la clase Object,

raíz de la jerarquía.

• Toda clase tiene disponibles sus métodos:

– public final Class getClass() (cid:198) clase que representa el tipo del objeto
– public boolean equals(Object obj) (cid:198) igualdad de valores
– public String toString() (cid:198) Devuelve la representación del obj en un

String

– protected Object clone() (cid:198) devuelve una copia del objeto
– public int hashCode() (cid:198) devuelve un código que identifica de manera
- protected void finalize() (cid:198) relacionado con liberar memoria
• Hay que redefinir equals, toString, hashCode y clone para

única al objeto

adaptarlos.

El lenguaje de programación Java

17

Método getClass. Clase Class

• Sirve para identificar el tipo de los objetos en tiempo de

ejecución

• Describe las propiedades de la clase de un objeto
• String getName(): devuelve el nombre de la clase
• Ejemplo:

Empleado e; …
System.out.println(e.getClass().getName()

SALIDA: Empleado Pedro Martínez

+ e.getNombre());

El lenguaje de programación Java

18

9

getClass vs instanceof
• instanceof

“¿Eres de esta clase o de una clase derivada de ésta?”

• comparando los objetos Class

“¿Eres exactamente de esta clase?”

• Ejemplo: Sea Rectangulo una subclase de la clase

Figura
Rectangulo r = new Rectangulo();
(r instanceof Figura)
(cid:198) true
(r.getClass().equals(Figura.class)) (cid:198) false

El lenguaje de programación Java

19

Igualdad en Java



Igualdad de referencias (identidad):

objPila1 == objPila2 --> false
objPila1 != objPila2 --> true

• Método equals

– Disponible para todo objeto
– public boolean equals(Object obj)
– Comportamiento por defecto: this==obj
– Utilizado para implementar la igualdad de objetos.

El lenguaje de programación Java

20

10

Método equals

• Propiedades del método equals:

– reflexivo: x.equals(x) = true para todo x!=null
– simétrico: x.equals(y) = y.equals(x)
– transitivo: SI x.equals(y) AND y.equals(z)

ENTONCES x.equals(z)

– consistente: Llamadas repetidas a x.equals(y) debe
devolver el mismo valor si los objetos a los que referencian x
e y no han cambiado

– x.equals(null) debe devolver false.

El lenguaje de programación Java

21

Ejemplo de redefinición de equals

public class Punto {

// . . .
public boolean equals(Object otroObjeto){

// 1º comprobar si son idénticos
if (this == otroObjeto) return true;
// 2º si el argumento es null debe devolver falso
if (otroObjeto == null) return false;
// 3º Si son de clases distintas no pueden ser iguales
if (getClass() != otroObjeto.getClass())return false;
// ahora sabemos que otherObject es un Punto no nulo
Punto otroPunto = (Punto)otroObjeto;
//Comprobamos si los campos tienen valores idénticos
return x == ot
  • Links de descarga
http://lwp-l.com/pdf7766

Comentarios de: 6. Herencia. Clases abstractas (0)


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios...
CerrarCerrar
CerrarCerrar
Cerrar

Tienes que ser un usuario registrado para poder insertar imágenes, archivos y/o videos.

Puedes registrarte o validarte desde aquí.

Codigo
Negrita
Subrayado
Tachado
Cursiva
Insertar enlace
Imagen externa
Emoticon
Tabular
Centrar
Titulo
Linea
Disminuir
Aumentar
Vista preliminar
sonreir
dientes
lengua
guiño
enfadado
confundido
llorar
avergonzado
sorprendido
triste
sol
estrella
jarra
camara
taza de cafe
email
beso
bombilla
amor
mal
bien
Es necesario revisar y aceptar las políticas de privacidad