miércoles, 29 de febrero de 2012

Capítulo 7: Herencia.


  • La herencia se usa para ubicar código común en una clase base.
  • La herencia hace que se pueda tener un código más modularizado y fácil de mantener.
  • Para notificar que una clase hereda de otra, se usa la palabra clave extends.
  • Cuando una clase hereda de otra, ésta toma todos sus métodos visibles y variables instanciadas.
  • A la clase que está siendo heredada se le llama clase base o superclase.
  • La clase que toma la funcionalidad se le llama subclase.
  • Un método de una superclase puede ser sobreescrito (overridden) si la subclase tiene un método con idénticas características (mismos parámetros y nombre) y el método de las superclase no es final ni static. Ejemplo: la clase padre es esta :
    public class Animal {
       public void comer(){
         System.out.println("Animal comiendo...");
      }
    }
    y la clase hijo puede ser esta:
    class Caballo extends Animal{
      public void comer(){
        System.out.println("Caballo comiendo...");
      }
    }
  • Otro ejemplo de herencia:
public class Padre{
   String m=”padre”;
   void say(){
      System.out.println(“Say padre”);
   }
}
public class Hijo extends Padre{
   String m=”hijo”;
   void say(){
      System.out.println(“Say hija”);
   }
}
public class Test{
   public static void main(String[] args) {
    Padre yo=new Hijo();
    yo.say();
    System.out.println(“m=”+m);
  }
}
El resultado sería:
Say hija
m=padre


  • La palabra clave super se puede usar para acceder a ese método sobrescrito.
  • Una clase solo puede heredar de otra, como un hijo solo puede heredar de un único padre.
  • Una clase concreta (concrete class) es aquella que puede ser instanciada, y todos sus métodos deben ser implementados. Es la clase estándar en java.
  • Una clase abstract es aquella que no puede ser instanciada. Debe ser extendida por otra clase, es decir, debe tener alguna clase hija. Una clase abstract debe tener al menos un método abstracto. Si hay un método abstracto, la clase tiene que ser también abstracta. Puede tener constructores pero solo lo podrán usar las hijas mediante super.
  • No puede tener métodos privados pero sí variables privadas.
  • Cuando una clase hereda de una clase abstracta, no todos los métodos abstractos deben estar implementados en esta clase no abstracta.
  • Si hay un método static en la clase abstract, el método que lo implemente también debe marcarse como static. 
  • Una clase final se declara como la clase que termina una cadena de herencia, es lo contrario a una clase abstracta. Nadie puede heredar de una clase final.
  • Ejemplos de sobrecarga (Overload):
    Si tenemos:   public int m(int a,int b):
      public float m(int a,int b)            
public int m(int a, int b, int c)       
public int m(int a, boolean b)                      
  • Todas las clases heredan de la clase object.
  • Una interface es una clase abstracta pura, es decir, una clase donde todos los métodos son abstractos (no se implementa ninguno).Es un esqueleto donde el diseñador define la cabecera de los métodos. En una interface todos los métodos son públicos y abstractos. No es necesario poner public a los métodos del interfaz, pero los métodos que lo implementen en otra clase si hay que ponerle public. Las interfaces no se heredan, solo se implementan.
  • Las interfaces tienen atributos que serán constantes : public static final p=2;
  • Una interfaz puede heredar interfaces, no clases.
  • Una interfaz puede heredar interfaces(extends), no implementar interfaces (implements)
  • No se puede crear una instancia de un interfaz (Pet p=new Pet());
  • Para indicar que una clase implementa los métodos de una interface se utiliza la palabra clave implements.
  • Una clase puede implementar múltiples interfaces utilizando una lista separada por comas.
  • Una clase que implementa una interfaz debe implementar todos los métodos contenidos en esa interface.
  • No se puede instanciar una interfaz.
  • El concepto de Encapsulación es el almacenamiento en un mismo lugar de datos y código relacionado. No es un ejemplo de encapsulación un código que tiene una clase con atributos públicos.
  • Los modificadores de acceso se usan para restringir el acceso a métodos y variables.
  • El modificador de acceso public permite que cualquier clase pueda acceder a métodos y variables públicas.
  • El modificador de acceso private permite que solo los métodos de la misma clase puedan acceder a otros métodos y variables privadas.
  • Protected hace que los métodos o variables solo estén disponibles en las clases del mismo paquete.
  •   El concepto de Information Hiding(Ocultación de información) es el uso de modificadores de acceso restringidos para ocultar los detalles de implementación de una clase.
  • Cuando se crean métodos o instancias de variables, se debe utilizar el modificador de acceso más restrictivo posible.
  • Un getter se usa para acceder al valor de una variable privada.
  • Un setter se usa para establecer el valor de una variable privada.
  • Ambos getter y setter deben seguir la misma nomenclatura de nombres de JavaBeans, deben empezar por ‘get’,’set’ o ‘is’ seguidos del nombre de la variable, empezando por letra mayúscula.
  • La herencia en UML representa un ‘is-a’ y se muestra asi:

No hay comentarios:

Publicar un comentario