¿Cuándo uso super ()?

Actualmente estoy aprendiendo acerca de la herencia de clase en mi curso de Java y no entiendo cuándo usar la llamada super() ?

Editar:
Encontré este ejemplo de código donde super. variable super. variable se utiliza:

 class A { int k = 10; } class Test extends A { public void m() { System.out.println(super.k); } } 

Entonces entiendo que aquí, debes usar super para acceder a la variable k en la superclase. Sin embargo, en cualquier otro caso, ¿qué hace super(); ¿hacer? ¿Por sí mismo?

Llamar exactamente a super() siempre es redundante. Está haciendo explícitamente lo que se haría implícitamente de lo contrario. Esto se debe a que si omite una llamada al superconstructor, el súper constructor sin argumento se invocará automáticamente de todos modos. No quiere decir que es un mal estilo; algunas personas les gusta ser explícito.

Sin embargo, donde se convierte en útil es cuando el super constructor toma los argumentos que desea pasar desde la subclase.

 public class Animal { private final String noise; protected Animal(String noise) { this.noise = noise; } public void makeNoise() { System.out.println(noise); } } public class Pig extends Animal { public Pig() { super("Oink"); } } 

super se utiliza para llamar al constructor , los methods y las properties de la clase principal.

También puede usar la palabra clave super en la subclase cuando desee invocar un método de la clase principal cuando lo haya anulado en la subclase.

Ejemplo:

 public class CellPhone { public void print() { System.out.println("I'm a cellphone"); } } public class TouchPhone extends CellPhone { @Override public void print() { super.print(); System.out.println("I'm a touch screen cellphone"); } public static void main (strings[] args) { TouchPhone p = new TouchPhone(); p.print(); } } 

Aquí, la línea super.print() invoca el método print() de la superclase CellPhone . El resultado será:

 I'm a cellphone I'm a touch screen cellphone 

Cuando quiere que se llame al constructor de superclase: para inicializar los campos dentro de él. Eche un vistazo a este artículo para entender cuándo usarlo:

http://download.oracle.com/javase/tutorial/java/IandI/super.html

Lo usaría como la primera línea de un constructor de subclase para llamar al constructor de su clase principal.

Por ejemplo:

 public class TheSuper{ public TheSuper(){ eatCake(); } } public class TheSub extends TheSuper{ public TheSub(){ super(); eatMoreCake(); } } 

La construcción de una instancia de TheSub llamaría a eatCake() y eatMoreCake()

Podrías usarlo para llamar al método de una superclase (como cuando anulas ese método, super.foo (), etc.); esto te permitiría conservar esa funcionalidad y agregarla a ella con cualquier otra cosa que tengas en el overriden. método.

Llamas a super() para ejecutar específicamente un constructor de tu superclase. Dado que una clase puede tener múltiples constructores, puede llamar a un constructor específico usando super() o super(param,param) oder, puede dejar que Java maneje eso y llame al constructor estándar. Recuerde que las clases que siguen una jerarquía de clases siguen la relación “es-a”.

La primera línea del constructor de su subclase debe ser una llamada a super() para asegurarse de que se llama al constructor de la superclase.

Lo intenté, comentando super (); hace lo mismo sin comentarlo como @Mark Peters dijo

 package javaapplication6; /** * * @author sborusu */ public class Super_Test { Super_Test(){ System.out.println("This is super class, no object is created"); } } class Super_sub extends Super_Test{ Super_sub(){ super(); System.out.println("This is sub class, object is created"); } public static void main(String args[]){ new Super_sub(); } } 

De la página de documentación de Oracle :

Si su método anula uno de los métodos de su superclase, puede invocar el método reemplazado mediante el uso de la palabra clave super .

También puede usar super para referirse a un campo oculto (aunque se desaconseja ocultar campos).

Uso de super en constructor de subclases:

La invocación de un constructor de superclase debe ser la primera línea en el constructor de subclase.

La syntax para llamar a un constructor de superclase es

 super(); 

o:

 super(parameter list); 

Con super() , se llama al constructor de superclases sin argumentos. Con super(parameter list) , se llama al constructor de superclase con una lista de parámetros correspondiente.

Nota: Si un constructor no invoca explícitamente un constructor de superclase, el comstackdor de Java inserta automáticamente una llamada al constructor sin argumento de la superclase . Si la superclase no tiene un constructor sin argumentos, obtendrá un error en tiempo de comstackción.

Publicación relacionada:

Polimorfismo vs Sobrecarga vs Sobrecarga