HERENCIA

Es un mecanismo que define nuevos objetos con base en los existentes. Java las soporta con extensión de clase, definiendo una nueva clase con base en otra ya existente sin modificarla. A la primera clase se le llama subclase o clase extendida, recibe los miembros de una superclase y agrega otros de su propiedad. Aunque también es posible que la herede dado el surgimiento de jerarquías.

Java soporta la herencia sencilla a través de extensión de clase. En éste tipo de herencia una clase

se extiende a partir de una sola superclase.

Ejemplo:

public class Muestra extends Frame

{

        // atributos de la clase 

        Button si; 

        Button no; 

        // métodos de la clase: 

        public Muestra () 

        { 

                Label comentario = new Label(“Presione un botón”, Label.CENTER); 

                si  = new Button(“Sí”); 

                no = new Button(“No”); 

                add(“North”, comentario); 

                add(“East”, si); 

                add(“West”, no); 

        } 

}

Esta clase no está muy completa así, pero da una idea… Es una clase heredera de la clase Frame (un tipo de ventana) que tiene un par de botones y un texto. Contiene dos atributos (“si” y “no”), que son dos objetos del tipo Button, y un único método llamado Muestra (igual que la clase, por lo que es lo que se llama un constructor).

AMIGOS ESTA DEFINICION Y EJEMPLO ES UN POCO MAS CLARA:

HERENCIA

La Herencia es el mecanismo por el que se crean nuevos objetos definidos en términos de objetos ya existentes. Por ejemplo, si se tiene la clase Ave, se puede crear la subclase Pato, que es una especialización de Ave.

    class Pato extends Ave {

        int numero_de_patas;

        }

La palabra clave extends se usa para generar una subclase (especialización) de un objeto. Una Pato es una subclase de Ave. Cualquier cosa que contenga la definición de Ave será copiada a la clase Pato, además, en Pato se pueden definir sus propios métodos y variables de instancia. Se dice que Pato deriva o hereda de Ave.

Además, se pueden sustituir los métodos proporcionados por la clase base. Utilizando nuestro anterior ejemplo de Mi Clase, aquí hay un ejemplo de una clase derivada sustituyendo a la función Suma_a_i():

    import Mi Clase;

    public class Mi Nueva Clase extends Mi Clase {

        public void Suma_a_i( int j ) {

            i = i + ( j/2 );

            }

        }

Ahora cuando se crea una instancia de Mi Nueva Clase, el valor de i también se inicializa a 10, pero la llamada al método Suma_a_i() produce un resultado diferente:

    Mi Nueva Clase mnc;

    mnc = new Mi Nueva Clase();

    mnc.Suma_a_i( 10 );

En Java no se puede hacer herencia múltiple. Por ejemplo, de la clase aparato con motor y de la clase animal no se puede derivar nada, sería como obtener el objeto toro mecánico a partir de una máquina motorizada (aparato con motor) y un toro (aminal). En realidad, lo que se pretende es copiar los métodos, es decir, pasar la funcionalidad del toro de verdad al toro mecánico, con lo cual no sería necesaria la herencia múltiple sino simplemente la compartición de funcionalidad que se encuentra implementada en Java a través de interfaces.