Palabra clave súper en Java

Palabra clave súper en Java
La palabra clave super se usa en la herencia de las clases de Java. En Java, la superclase es la clase madre de una clase actual. La clase actual es la clase infantil (subclase) de la superclase. Existe la posibilidad de que el nieto y las clases de bisnietos vayan hacia abajo. La clase principal es la superclase directa de la clase actual. La clase de abuelos no es la superclase directa de la clase actual. Este artículo explica el uso de la palabra clave, Super en Java. Comienza presentando una clase matriz, un hijo de la clase padre y un nieto de la clase madre. Luego muestra cómo la palabra, super, encaja en la jerarquía. La jerarquía a continuación forma una forma de la calculadora.

Contenido del artículo

  • Recuerdo de la herencia de Java
  • Uso de la palabra clave súper
  • Conclusión

Recuerdo de la herencia de Java

Considere la siguiente clase:

Clase CParent
int a;
int b;
int add ()
devolver a + b;

Esta clase tiene dos propiedades: A y B. En Java, las propiedades se llaman campos. Esta clase tiene un método que agrega dos números, que son los valores de campo. El nombre de la clase es CParent, con la C anterior, para la calculadora. El siguiente segmento de código en el método main (), salidas 5:

CPARENT PROPED = new CParent ();
padre.a = 2;
padre.b = 3;
int radd = padre.agregar();
Sistema.afuera.println (radd);

Considere la siguiente clase, que es la subclase de la clase anterior (CParent):

clase Cchild extiende CParent
int c;
int multiply ()
devolver a * c;

Nota El uso de la palabra clave se extiende. Esta clase tiene el campo, c, y el método, multiplicar (). La clase hereda los campos, 'A' y B, y el método, add (). Sin embargo, si el valor de campo para 'a' o b se debe usar para este objeto instanciado actual (objeto infantil), aún debe reasignarse como un valor. Para esta clase, el valor de 'a' heredado se multiplica por el valor de campo de la clase de C. El nombre de esta clase es Cchild, con la C anterior, para la calculadora. El siguiente segmento de código en el método Main () se adapta a esta clase:

Cchild Child = new Cchild ();
niño.a = 2;
niño.c = 4;
int rmult = niño.multiplicar();
Sistema.afuera.println (rmult);

La salida es 8. Tenga en cuenta que, aunque el campo 'A' fue heredado, todavía tenía que ser reasignado un valor; En este caso, el mismo valor.

Considere la siguiente clase, que es la subclase de la clase anterior, Cchild:

Clase Cgrandchild extiende Cchild
int d;
int divide ()
devolver a / d;

Nota El uso de la palabra clave se extiende. Esta clase tiene el campo, d, y el método, divide (). La clase hereda a los miembros, 'a', b, y add () de la clase Cchild, que los heredó de la clase CParent. También hereda los miembros, c, y multiplica () de la clase Cchild. Sin embargo, si el valor de campo para 'a' o b o c, de las clases matriz o abuelos, se debe utilizar para este objeto instanciado actual (objeto de nieto), aún debe reasignarse como un valor. Para esta clase, el valor de 'a' heredado se divide por el valor de campo de la clase de D. El nombre de esta clase es Cgrandchild, con la C anterior, para la calculadora. El siguiente segmento de código en el método Main () se adapta a esta clase:

CGrandChild gchild = new CGrandChild ();
gachild.a = 2;
gachild.d = 2;
int rdiv = gchild.dividir();
Sistema.afuera.println (rdiv);

La salida es 1. Tenga en cuenta que, aunque el campo 'A' fue heredado, todavía tenía que ser reasignado un valor; En este caso, el mismo valor, 2.

Uso de la palabra clave súper

Campo y super
En el programa anterior, el valor para el campo, 'a' se estableció tres veces, una vez para el objeto principal, una vez para el objeto infantil, y una vez para el objeto de nieto. Para evitar este restablecimiento cada vez, el valor de 2 se puede asignar una vez, en la implementación de la clase principal (definición) de la siguiente manera:

Clase CParent
int a = 2;
int b;
int add ()
devolver a + b;

Esto resuelve el problema de restablecer para cada objeto descendiente. En las clases descendientes, el campo, 'A' simplemente se hace referencia (normalmente).

Para acceder al valor de un campo heredado, la palabra clave súper debe usarse en la implementación de la clase descendiente de interés, de la siguiente manera:

súper.nombre del campo

El siguiente segmento de código muestra cómo se ha accedido al nombre 'A', en una nueva implementación de CCHILD:

clase Cchild extiende CParent
int p = super.a;
int c;
int multiply ()
regresar p * c;

La clase, Cchild, ahora tiene su propio nombre, P en lugar de 'a'. Y así la declaración en el método add (),

devolver a * c;

es ahora,

regresar p * c;

De manera similar, la implementación de la clase, CgrandChild puede haber 'a' reemplazado por Q, como sigue:

Clase Cgrandchild extiende Cchild
int q = super.a;
int d;
int divide ()
devolver Q / D;

Nota: La herencia tiene lugar en todas las clases descendientes. El campo 'A' y el método add () se heredan en la clase CCHILD y en la clase CgrandChild.

Método y super
Del mismo modo, se puede acceder a un campo heredado en la implementación de una clase descendiente; También se puede acceder a un método heredado en una clase descendiente, utilizando la palabra clave súper. La sintaxis es:

súper.MethodName ()

La implementación de la clase CCHILD original se puede modificar de la siguiente manera:

clase Cchild extiende CParent
int c;
int sum = super.agregar();
int multiply ()
devolver a * c;

Tenga en cuenta que el uso de super. El método Add () heredado ahora se considera una "suma" en la implementación de CCHILD. El campo C, y el método, multiplicar (), todavía están allí. Un segmento de código para la adición en el método main () que se adapta a esta clase CCHILD modificada es:

Cchild Child = new Cchild ();
int rsum = niño.suma;
Sistema.afuera.println (rsum);

La salida es 5, suponiendo que la clase principal se modificó con:

int a = 2;
int b = 3;

Constructor y super
El constructor predeterminado, que no se implementa, se hereda en cada clase descendiente y no tiene que contabilizarse en la implementación de los descendientes y en el método principal (). Sin embargo, una vez que una clase principal tiene un constructor personalizado, el resto de sus descendientes deben tener un constructor similar. Considere la clase principal, con un constructor personalizado, como sigue:

Clase CParent
int a, b;
public cParent (int x, int y)
a = x; b = y;

int add ()
devolver a + b;

Los campos de 'a' y b se declaran sin asignación. El constructor hace la tarea. La clase infantil debe tener lo mismo o un constructor similar. La clase infantil correspondiente para la jerarquía de la calculadora original puede ser:

clase Cchild extiende CParent
Cchild (int x, int y)
super (x, y);

int c;
int multiply ()
devolver a * c;

El constructor aquí es el mismo que el de los padres. El cuerpo del constructor aquí solo tiene:

super (x, y);

que solo llama al constructor del padre, con los argumentos recibidos. "Super" aquí representa el constructor de la clase principal. Este es otro uso de Super. No hay modificación en este constructor infantil. La clase de nieto correspondiente para la jerarquía de calculadora original puede ser:

Clase Cgrandchild extiende Cchild
int d;
CgrandChild (int x, int y, int z)
super (x, y);
d = z;

int divide ()
devolver a / d;

El constructor aquí se modifica. Tiene los mismos parámetros x e y y un parámetro adicional, z. z es asignar el valor para d, el divisor. El cuerpo para el constructor comienza llamando al constructor de la clase principal. Entonces se asigna el campo para el divisor. El siguiente segmento de código en el método Main () se adapta a esta clase:

CgrandChild GCHILD = New CgrandChild (2, 3, 2);
int rdiv = gchild.dividir();
Sistema.afuera.println (rdiv);

La salida para esto es 1.

Conclusión

Super buscará algo en la clase matriz inmediata. Si no lo ve allí, lo buscará en la clase de abuelos. Si no lo ve allí, lo buscará en la clase de bisabuelo; y así sucesivamente, hasta que lo vea o no lo ve. "Super" generalmente se usa dentro de la implementación de una subclase. Se utiliza para campo, método y constructor. La superclase directa es la clase principal. La clase de abuelos es una superclase, pero no la superclase directa. A continuación, el lector debe comprender el uso de "super" con clases anidadas; ver más tarde.