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
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.
2
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.
3
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;
}
4
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);
}
5
Ejemplo de clases extendidas
class Vehiculopasajeros extends vehiculo
{
int asientos = 50;
int ocupados;
public Vehiculopasajeros( int disponibles, int ocu){
super();
asientos = disponibles;
ocupados = ocu;
}
6
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());
7
Ejemplo de clases
extendidas
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);
}
}
8
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
protected nombre
Vehiculopasajeros
auto
Vehiculopasajeros 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.
combi
9
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.
10
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.
11
Valores iniciales para los
campos
Tipos
Valores iniciales
numericos
0
char
/u0000
boolean
false
referencias a objetos
null
12
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.
13
Anulación de métodos y
ocultamiento de campos (I)
anulan
Métodos
sobrecargan
Campos
ocultan
14
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.
15
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.
16
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
17
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."); } }
18
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();
19
myAnimal.testInstanceMethod();
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.
20
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.
21
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 objeto22
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)
23
Object como superclase
public boolean equals(Object obj)
protected void finalize() throws Throwable
public String toString()
24
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; } }
25
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.
26
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.
27
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.
28
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);
.................
}
29
Descargar

Clases EXtendidas