Documente Academic
Documente Profesional
Documente Cultură
relacionadas. Por ejemplo, si tienes una entidad llamada Ciudad, y otra habitantes...
La entidad ciudad tiene unas propiedades básicas como Id, nombre, superficie, al
igual que la entidad habitante tiene las suyas.
Cuando java carga la entidad Ciudad, carga esas propiedades básicas, pero para
habitantes tienes 2 opciones. Cargar todos los habitantes de esa ciudad(eagerly) o
ir cargando los habitantes a demanda(lazy) cuando por ejemplo se llame a una
función como por ejemplo GetHabitantes().
Jerarquía
Los descendientes de una clase heredan todas las variables y métodos que sus
ascendientes hayan especificado como heredables, además de crear los suyos propios.
Tipos de herencia
Herencia simple
Un objeto puede extender las características de otro objeto y de ningún otro, es decir, que
solo puede heredar o tomar atributos de un solo padre o de una sola clase.
Herencia múltiple
Un objeto puede extender las características de uno o más objetos, es decir, puede tener
varios padres.
Declaración
Para indicar que una clase deriva de otra, heredando sus propiedades (métodos y
atributos), se usa el término extends, como en el siguiente ejemplo:
Por ejemplo, creamos una clase MiPunto3D, hija de la clase ya mostrada MiPunto:
La palabra clave extends se utiliza para decir que deseamos crear una subclase de la
clase que es nombrada a continuación, en nuestro caso MiPunto3D es hija de MiPunto.
Limitaciones de la herencia
Todos los campos y métodos de una clase son siempre accesibles para el código de la
misma clase.
Para controlar el acceso desde otras clases, y para controlar la herencia por las subclases,
los miembros (atributos y métodos) de las clases tienen tres modificadores posibles de
control de acceso:
Public: Los miembros declarados public son accesibles en cualquier lugar en que sea
accesible la clase, y son heredados por las subclases.
Private: Los miembros declarados private son accesibles sólo en la propia clase.
Protected: Los miembros declarados protected son accesibles sólo para sus subclases.
Por ejemplo
class Padre {
// Atributos
private int numeroFavorito;
private int nacidoHace;
private int dineroDisponible;
// Métodos
public int getApuesta()
{
return numeroFavorito;
}
// Definición
class Visita {
// Definición
En este ejemplo, un objeto de la clase Hija, hereda los tres atributos (numeroFavorito,
nacidoHace y dineroDisponible) y los tres métodos ( getApuesta(), getEdad() y getSaldo() )
de la clase Padre, y podrá invocarlos. Cuando se llame al método getEdad() de un objeto
de la clase Hija, se devolverá el valor de la variable de instancia nacidoHace de ese objeto,
y no de uno de la clase Padre.
La clase Visita, solo podrá acceder al método getApuesta(), para averiguar el número
favorito de un Padre, pero de ninguna manera podrá conocer ni su saldo, ni su edad.
La clase object
La clase Object es la superclase de todas las clases da Java. Todas las clases derivan,
directa o indirectamente de ella. Si al definir una nueva clase, no aparece la cláusula
extends, Java considera que dicha clase desciende directamente de Object.
Public boolean equals(Object obj) compara si dos objetos son iguales, por defecto un
objeto es igual solamente a si mismo.
Public int hashCode() devuelve (con alta probabilidad) un valor distinto para cada objeto.
Public final Class getClass() devuelve el objeto del tipo Class que representa dicha clase
durante la ejecución.
Protected void finalize() throws Throwable se usa para finalizar el objeto, es decir, se
avisa al administrador de la memoria que ya no se usa dicho objeto, y se puede ejecutar
código especial antes de que se libere la memoria.
El polimorfismo
* Cuando vía subtipo asignamos una instancia de una subclase a una referencia a la clase
base.
/
public class Taxi extends Coche {
/* heredado de Coche */
public void recorrer(double kms) {
System.out.println("Taxi@: inicia carrera" );
printInfo();
/* metodo "recorrer"heredado de Coche
* /
super.recorrer(kms);
System.out.println("Taxi@: fin de carrera" );
}
}
/* Ejemplo de asignacion a
la misma variable de objetos de diferentes clases. */
Ligadura dinámica
Ligadura estática:
* La utilizan (en Java) los métodos de clase y los métodos de instancia que son privados o
final (ya que estos últimos no pueden ser sobrescritos).
Ligadura dinámica:
* Se utiliza en todos los métodos de instancia de Java que no son privados ni final.
Ligadura Dinámica:
* Significa que la forma dinámica del objeto determina la versión de la operación que se
aplicará.
* Esta capacidad de las operaciones para adaptarse automáticamente a los objetos a los
cuales se aplican es una de las propiedades más importantes de la orientación a objetos.
* Deben presentar ligadura dinámica solo aquellos que pueden ser redefinidos.
* Por ejemplo, en Java, los métodos de clase y los métodos de instancia privados y/o
finales no presentan ligadura dinámica.
* En Java, si no se especifica nada se entenderá que el método puede ser redefinido y por
tanto debe presentar ligadura dinámica.