29
1 Clases Extendidas La clase extendida hereda los campos y métodos de la clase de la cual extiende. La clase original se conoce como superclase y la clase extendida como subclase.

1 Clases Extendidas La clase extendida hereda los campos y métodos de la clase de la cual extiende. La clase original se conoce como superclase y la clase

Embed Size (px)

Citation preview

Page 1: 1 Clases Extendidas La clase extendida hereda los campos y métodos de la clase de la cual extiende. La clase original se conoce como superclase y la clase

1

Clases Extendidas

La clase extendida hereda los campos y métodos de la clase de la cual extiende.

La clase original se conoce como superclase y la clase extendida como subclase.

Page 2: 1 Clases Extendidas La clase extendida hereda los campos y métodos de la clase de la cual extiende. La clase original se conoce como superclase y la clase

2

Clases Extendidas

Una clase extendida se puede usar en cualquier lugar en que se podía usar la superclase. Esto se conoce como polimorfismo.

Clases diferentes, que se denominan polimórficas pueden implementar métodos con el mismo nombre. Es decir objetos de clases distintas pueden entender mensajes iguales.

Las clases extendidas, en Java, se declaran con la claúsula extends.

Page 3: 1 Clases Extendidas La clase extendida hereda los campos y métodos de la clase de la cual extiende. La clase original se conoce como superclase y la clase

3

Clases Extendidas

En Java todos los ejemplos que hemos visto hasta ahora extienden implicitamente de la clase Object.

Object es la raíz de todas las clases. Esta clase declara métodos que heredan todas las clases.

Las variables de clase Object pueden referenciar a cualquier objeto.

Page 4: 1 Clases Extendidas La clase extendida hereda los campos y métodos de la clase de la cual extiende. La clase original se conoce como superclase y la clase

4

Ejemplo de clases extendidas

import java.io.*;

class vehiculo {protected long idnum; protected String nombre = "sin nombre"; private static long sigId = 0;

public vehiculo( ) { idnum = sigId++; }

protected long getsigId(){return sigId;

}

Page 5: 1 Clases Extendidas La clase extendida hereda los campos y métodos de la clase de la cual extiende. La clase original se conoce como superclase y la clase

5

Ejemplo de clases extendidas

public static void main(String [] args) {vehiculo auto = new vehiculo();auto.nombre = "Miauto";vehiculo colectivo = new vehiculo();colectivo.nombre = "Micolectivo";

System.out.println("Vehiculo" + auto.nombre); System.out.println("Vehiculo" + colectivo.nombre);

}

Page 6: 1 Clases Extendidas La clase extendida hereda los campos y métodos de la clase de la cual extiende. La clase original se conoce como superclase y la clase

6

Ejemplo de clases extendidas

class Vehiculopasajeros extends vehiculo {

int asientos = 50;int ocupados;

public Vehiculopasajeros( int disponibles, int ocu){super();asientos = disponibles;ocupados = ocu;

}

Page 7: 1 Clases Extendidas La clase extendida hereda los campos y métodos de la clase de la cual extiende. La clase original se conoce como superclase y la clase

7

Ejemplo de clases extendidas

public static void main(String [] args) {

int cant = 60; int ocu = 0;

Vehiculopasajeros Urbano = new Vehiculopasajeros(cant,ocu);

System.out.println(" sigid de Urbano : " + Urbano.getsigId());

Vehiculopasajeros Inter = new Vehiculopasajeros(cant,ocu);

System.out.println(" sigid de Inter : " + Inter.getsigId());

Page 8: 1 Clases Extendidas La clase extendida hereda los campos y métodos de la clase de la cual extiende. La clase original se conoce como superclase y la clase

8

Urbano.nombre = "Cinta de Plata";Inter.nombre = "Turicenter";System.out.println("Vehiculo de pasajeros : " +

Urbano.nombre);System.out.println();System.out.println("Vehiculo de pasajeros : " +

Urbano.asientos);

}}

Ejemplo de clases extendidas

Page 9: 1 Clases Extendidas La clase extendida hereda los campos y métodos de la clase de la cual extiende. La clase original se conoce como superclase y la clase

9

Significado de protected

Un miembro protegido se puede acceder desde una clase por medio de referencias de objeto que sean del mismo tipo que la clase o de sus clases extendidas.

vehiculo

Vehiculopasajeros

combi

auto

protected nombreVehiculopasajeros puede acceder a nombre, a través de una referencia a Vehiculopasajeros o una referencia a combi. No puede acceder a través de una referencia a auto.

Page 10: 1 Clases Extendidas La clase extendida hereda los campos y métodos de la clase de la cual extiende. La clase original se conoce como superclase y la clase

10

Significado de protected

•Si nombre fuese estático, puedo acceder a él a través de cualquier referencias a cualquier tipo vehiculo.

•Los miembros declarados protected también son accesibles a todo el código de paquete.

•El mismo tratamiento explicado con los campos, ocurre con los métodos.

Page 11: 1 Clases Extendidas La clase extendida hereda los campos y métodos de la clase de la cual extiende. La clase original se conoce como superclase y la clase

11

Constructores en las clases extendidas

La clase extendida debe invocar uno de los constructores de la superclase, para que la parte del objeto que controla la superclase sea construido en forma correcta.

Para ello se puede usar

super( );

Si no se invoca en forma explícita un constructor de la superclase, se invoca en forma automática el constructor sin argumentos de la superclase, por lo cual la superclase debería tener un constructor no-arg.

Page 12: 1 Clases Extendidas La clase extendida hereda los campos y métodos de la clase de la cual extiende. La clase original se conoce como superclase y la clase

12

Valores iniciales para los campos

Tipos Valores iniciales

numericos 0

char /u0000

boolean false

referencias a objetos null

Page 13: 1 Clases Extendidas La clase extendida hereda los campos y métodos de la clase de la cual extiende. La clase original se conoce como superclase y la clase

13

Orden de ejecución

1. Invocar un constructor de la superclase.

2. Inicializar los campos usando sentencias de inicialización.

3. Ejecutar el cuerpo del constructor.

Page 14: 1 Clases Extendidas La clase extendida hereda los campos y métodos de la clase de la cual extiende. La clase original se conoce como superclase y la clase

14

Anulación de métodos y ocultamiento de campos (I)

anulan

Métodos

sobrecargan

Campos ocultan

Page 15: 1 Clases Extendidas La clase extendida hereda los campos y métodos de la clase de la cual extiende. La clase original se conoce como superclase y la clase

15

Anulación y sobrecarga de métodos

•Sobrecargar un método es tener más de un método con el mismo nombre pero con signaturas distintas.

•Anular un método es sustituir la implementación de un método de la superclase, por una implementación propia para la subclase. Las signaturas deben ser idénticas y el tipo devuelto también deben ser iguales.

•La claúsula throws del método anulador puede listar menos tipos de excepciones que la claúsula throws del método que se anuló, pero nunca más.

Page 16: 1 Clases Extendidas La clase extendida hereda los campos y métodos de la clase de la cual extiende. La clase original se conoce como superclase y la clase

16

Anulación y sobrecarga de métodos

•Los métodos anulados tienen sus propios especificadores de acceso. Una clase extendida puede modificar el acceso de los métodos de la superclase, pero sólo si otorga más acceso.

•Un método declarado protected puede ser redeclarado protected o public pero no private.

Page 17: 1 Clases Extendidas La clase extendida hereda los campos y métodos de la clase de la cual extiende. La clase original se conoce como superclase y la clase

17

Anulación y sobrecarga de métodos

Si una subclase define un método de clase, con la misma signatura que un método de clase de la superclase, el método de la subclase oculta al de la superclase.

La diferencia entre sobrecargar y ocultar es importante

Page 18: 1 Clases Extendidas La clase extendida hereda los campos y métodos de la clase de la cual extiende. La clase original se conoce como superclase y la clase

18

Anulación y sobrecarga de métodos

public class Animal { public static void testClassMethod()

{ System.out.println("The class method in Animal."); }

public void testInstanceMethod() { System.out.println("The instance method in Animal."); } }

Page 19: 1 Clases Extendidas La clase extendida hereda los campos y métodos de la clase de la cual extiende. La clase original se conoce como superclase y la clase

19

Anulación y sobrecarga de métodos

public class Cat extends Animal { public static void testClassMethod()

{ System.out.println("The class method in Cat."); }

public void testInstanceMethod() { System.out.println("The instance method in Cat."); }

public static void main(String[] args) { Cat myCat = new Cat(); Animal myAnimal = myCat; Animal.testClassMethod();

myAnimal.testInstanceMethod(); } }

Page 20: 1 Clases Extendidas La clase extendida hereda los campos y métodos de la clase de la cual extiende. La clase original se conoce como superclase y la clase

20

Anulación y sobrecarga de métodos

The class method in Animal. The instance method in Cat.

La implementación del método de clase que se invoca es el de la superclase.La implementación del método de instancia que se invoca es el de la subclase.

Page 21: 1 Clases Extendidas La clase extendida hereda los campos y métodos de la clase de la cual extiende. La clase original se conoce como superclase y la clase

21

Anulación de métodos y ocultamiento de campos

Los campos no se pueden anular sólo se pueden ocultar. Para ocultarlo basta con declarar un campo del mismo nombre, que un campo que ya existe en la superclase. Para acceder al campo de la superclase utilice super o una referencia del tipo de la superclase.

No es recomendable.

Page 22: 1 Clases Extendidas La clase extendida hereda los campos y métodos de la clase de la cual extiende. La clase original se conoce como superclase y la clase

22

Anulación de métodos de instancia y ocultamiento de campos

•Cuando se invoca un método sobre un objeto, el tipo real del objeto determina que implementación se usa.

•Cuando se accede a un campo se usa el tipo declarado de la referencia.

•Tengo una clase A y una clase B que extiende de A.

B segundo =new B( );

Determina la referencia al objeto

Determina el tipo real del objeto

Page 23: 1 Clases Extendidas La clase extendida hereda los campos y métodos de la clase de la cual extiende. La clase original se conoce como superclase y la clase

23

Anulación de métodos y ocultamiento de campos

•La clase A, tiene un campo String x, y la clase B tiene también un campo String x,que oculta al campo de la superclase, y con un método de instancia mostrar que esta anulado en la clase extendida.

B primero = new B( ); (B: clase extendida)

A segundo = primero; (A superclase)

primero.mostrar( );

segundo.mostrar( ); (siempre se invoca el método del tipo real del objeto, en este caso el método implementado en B).

Primero.x; ( se refiere al campo de B)

Segundo.x ( se refiere al campo de A)

Page 24: 1 Clases Extendidas La clase extendida hereda los campos y métodos de la clase de la cual extiende. La clase original se conoce como superclase y la clase

24

Object como superclase

public boolean equals(Object obj)

protected void finalize() throws Throwable

public String toString()

     

Page 25: 1 Clases Extendidas La clase extendida hereda los campos y métodos de la clase de la cual extiende. La clase original se conoce como superclase y la clase

25

Object como superclase: equals

public class Book { ... public boolean equals(Object obj) {

if (obj instanceof Book) return ISBN.equals((Book)obj.getISBN());

else return false; } }      

Page 26: 1 Clases Extendidas La clase extendida hereda los campos y métodos de la clase de la cual extiende. La clase original se conoce como superclase y la clase

26

Object como superclase: finalize

finalize : para asegurar que los recursos utilizados quedan en un estado consistente

toString: retorna un objeto en forma de String. Esto depende exclusivamente del objeto, razón por la cual debe sobrecargarse el método.

Page 27: 1 Clases Extendidas La clase extendida hereda los campos y métodos de la clase de la cual extiende. La clase original se conoce como superclase y la clase

27

Clases y métodos finales

En un método indica que el mismo no puede anularse en las subclases.

En una clase indica que no pueden extenderse clases de ellas.

Page 28: 1 Clases Extendidas La clase extendida hereda los campos y métodos de la clase de la cual extiende. La clase original se conoce como superclase y la clase

28

Métodos y clases abstractas

Una clase abstracta es una que se declara abstract:abstract class figura{

.....................} y puede o no contener métodos abstractos.Una clase abstracta no puede ser

instanciada.

Page 29: 1 Clases Extendidas La clase extendida hereda los campos y métodos de la clase de la cual extiende. La clase original se conoce como superclase y la clase

29

Métodos y clases abstractas

Un método abstracto es uno que es declarado pero no implementado.Si una clase incluye métodos abstractos debe declararse como abstracta.public abstract class figura { abstract void dibujarse (double x, double y); .................}