Documentos de Académico
Documentos de Profesional
Documentos de Cultura
String OutputStream
Component
Socket
System Button Label Container
this.x=x;
void Mostrar()
this.y=y; { System.out.println(“x=”+x+”
} y=”,y);
}
Punto( Punto P) {
} //fin de la Clase Punto
this(P.x,P.y);
}
Ejemplo Básico
class Punto3D extends Punto {
int z;
}
class B extends A {
B() {
// aca el compilador inserta una linea super() llamando al
constructor por defecto de la superclase de B
System.out.println("En el Constructor de B");
}
} Ver Constructores.java
Sobreescritura de Métodos
La Capacidad para Sobrescribir un Método
permite a una clase heredar de su Superclase
aquellos comportamientos “más cercanos” y
luego complementar ó modificar el
comportamiento de la superclase.
Es otra manera que tiene Java para implementar el
Polimorfismo: “Una Interfaz, multiples Métodos”
Sobrescritura de Métodos
Para Sobrescribir un método de la superclase
se declara un método con el mismo Nombre,
Parametros y tipo de retorno que en la
superclase .
Si se desea mantener la implementación del
método de la superclase y ampliar el método
para algún comportamiento especifico de la
subclase, podemos llamar al original a traves
de super.
Sobrescritura de Métodos
Class Punto3D extends Punto
{
int z; Aquí el método Mostrar
esta sobrescribiendo al
método con el mismo
void Mostrar() nombre en la super clase,
{
System.out.println(“x=”+x+”
y=”+y+ “z=”+z);
}
}
Sobrescritura de Métodos
Class Punto3D extends Punto {
Aparentemente el
int z; método distancia esta
sobrescribiendo al
float distancia(int x, int y, int z) método con el mismo
nombre en la super
{ clase, ya que tiene el
int dx=this.x-x; mismo tipo y nombre
int dy=this.y-y; pero diferente lista de
int dz=this.z-z; parametros, por lo cual
no hay sobrescritura
return
sino sobrecarga.
Math.sqrt(dx*dx+dy*dy+dz*dz);
}
}
Sobrescritura de Métodos
Muchas clases proporcionan implementaciónes de
métodos vacías para que las subclases lo remplacen y le
den sentido de acuerdo a sus necesidades.
Un ejemplo de esto es el método run() de la clase
Thread, el cual es el cuerpo principal de un hilo en
ejecución, de tal manera que para crear un Hilo
simplemente heredamos de Thread y proporcionamos
una implementación (sobreescribimos) al método run():
class Hilo extends Thread {
void run() {
System.out.println(“Esto es un Hilo”);
}
}
Reglas al Sobrescribir Métodos
Para Sobrescribir un método, se debe tener presente
que el nuevo método debe tener el mismo Nombre,
Parametros y tipo de retorno que el método de la
superclase. Sino ocurre esto estamos hablando de
Sobrecarga de Métodos.
Un método declarado como final en la superclase no se
puede sobreescribir.
Un método declarado como static (Método de Clase)
en la superclase no se puede sobre escribir.
Un método declarado como abstract en la superclase
debe ser sobreescrito ó la superclase debe ser declarada
como abstracta.
Selección Dinámica de Método
La sobrescritura de método constituye la base de
uno de los conceptos mas poderosos de Java: La
Selección Dinámica de Método.
Es el mécanismo mediante el cual una llamada a
un método sobrescrito se resuelve en tiempo de
ejecución y no en tiempo de compilación.
Es otra de la formas que tiene Java de implementar
el polimorfismo.
Selección Dinámica de Método
1) A una variable de referencia de la superclase se le puede
asignar una referencia a cualquier subclase derivada de dicha
superclase. (ej: Punto P=new Punto(3,5); Object O=P )
2)Cuando una variable que referencia una superclase se le asigna
una referencia a un objeto de una subclase solo tendremos acceso
a aquellas partes del objeto definidas en la superclase. Es el tipo
de la variable y no el objeto referenciado quien determina que
miembros son accesibles.
3) Cuando se trata de un método Sobreescrito (en la subclase) a
traves de una variable referencia de la superclase, es el objeto que
esta siendo referenciado quien determina a cual método
llamar y no la variable, por lo cual siempre tendrá preferencia el
método sobreescrito en la subclase (Polimorfismo).
Ver BusquedaDinamica.java
Uso de final
La palabra reservada final tiene 3 usos:
1. Para declarar una Clase Final : No se puede
heredar de ella.
2. Para declarar un Método Final: No se puede
sobreescribir.
3. Para declarar una Variable Final: No se
puede modificar su valor, despues de haber
sido inicializada, actua como una constante.
Clases Finales
Se puede declarar una clase como final para indicar
que la clase no puede tener subclases (no podemos
heredar de ella).
Declaración:
final class MiClase {
//Cuerpo de la Clase ...
}
Esto se hace, fundamentalmente, por dos razones :
– Diseño
– Seguridad
La mayoria de las clases básicas de java son finales
por razones de seguridad.
Métodos Finales
Se utliza para evitar que un método sea sobreescrito.
Esto es deseable cuando el método tiene una
implementación que no debe ser cambiada y que es
crítica para mantener al objeto en un estado
consistente.
Declaración:
[acceso] final tipo método(){
//cuerpo del método
}
Donde tipo es el tipo del valor de retorno del método y
método es el nombre del mismo.
Variables Finales (Constantes)
Cuando usamos la palabra clave final en la
declaración de una variable miembro, le estamos
indicando al compilador que se trata de una
constante, es decir su contenido no puede ser
cambiado durante la ejecución del programa.
Declaración:
final tipo identificador=[ValorInicial]
Por convención, se estila escribir los nombres de las
constantes en mayusuculas (Igual que en C).
Si un programa intenta cambiar el valor de una
variable final, nos dará un error en tiempo de
compilación.
Variables Finales (Constantes)
Las Variables finales pueden ser inicializadas
con cualquier expresión valida.
Ejemplo: final int x=Math.random();
La inicialización de una variable final se
puede omitir al momento de declararla (blank
final), pero debe ser inicializada en el(los)
constructor(es) de la clase.
Las Variables finales pueden “ocultarse” en
las subclases, al declarar una variable con el
mismo nombre.
Algunas Notas sobre final
Al declarar una clase como final, implícitamente estamos
definiendo todos sus métodos como finales. ( ¿ Por qué?)
Usualmente las constantes se declaran como static final, para que
haya una sola para todas las instancias de la clase.
A veces es conveniente declarar los métodos como finales por
razones de eficiencia, ya que se evita el “overhead” de la selección
dinámica de método y el compilador puede realizar ciertas
optimizaciones.
Se pueden declarar parámetros a un método como final. Si el tipo
del parámetro es una clase esto significa que no puede referenciar a
otro objeto, pero si puede cambiar el contenido del objeto dentro del
método. Si es un tipo simple el contenido de la variable no puede
cambiar.
Ver Finales.java
Clases Abstractas