[Programación] Para que sirve super ()?

Alguien me puede explicar para que sirve poner super() en una función? He mirado un montón de sitios donde lo explican y no acabo de entender para que es, pero dicen que es bastante importante utilizarlo.
Para llamar a la constructora de la clase padre de la que hereda una clase
Supongo que hablas de Java.

Sirve para llamar al constructor de la clase padre. En este caso coges el constructor que no tienes parámetros:
class A
{
    public A()
    {
         System.out.println("Construido el objeto A");
    }
};

class B extends A
{
     public B()
     {
            super();
            System.out.println("Construido el objeto B");
     }
}


Cuando construyas la clase B, mostrará por pantalla:
Construido el objeto A
Construido el objeto B


Ya que llamamos al constructor de A con el super().
Pero sin super haría lo mismo no? Si extiendes la clase B a la clase A igualmente llamas al constructor de la clase A y a todas sus variables sin necesidad de super no?
Sirve para llamar a cualquier método de la clase superior, por ejemplo para hacer sobrecargas.

ygriega escribió:Pero sin super haría lo mismo no? Si extiendes la clase B a la clase A igualmente llamas al constructor de la clase A y a todas sus variables sin necesidad de super no?


Si existe un constructor para la clase superior sin parámetros, que Java te lo genera automáticamente, se inicializarán sus variables con valores por defecto. En cuanto definas tú un constructor te va a dar un error si no llamas a super(con los parámetros que sean).
Gracias por las respuestas, tendré que ir experimentando con los ejemplos que habéis puesto para acabar de entenderlo del todo, a lo mejor es que por mi manera de programar no he necesitado nunca utilizar esa función :)
Rolod escribió:
ygriega escribió:Pero sin super haría lo mismo no? Si extiendes la clase B a la clase A igualmente llamas al constructor de la clase A y a todas sus variables sin necesidad de super no?


Si existe un constructor para la clase superior sin parámetros, que Java te lo genera automáticamente, se inicializarán sus variables con valores por defecto. En cuanto definas tú un constructor te va a dar un error si no llamas a super(con los parámetros que sean).

Solo te lo genera si no hay otros constructores, sino no.

Class A
{
    A(int a)
    {
        System.out.println("Construido: " + a);
    }
}

//...

A objeto = new A(); // Error de compilación


Importante ese detalle.
ygriega escribió:Pero sin super haría lo mismo no? Si extiendes la clase B a la clase A igualmente llamas al constructor de la clase A y a todas sus variables sin necesidad de super no?

Pues si, tendría sentido si fueras a llamar a un constructor con parámetros.
amchacon escribió:Solo te lo genera si no hay otros constructores, sino no.


Gracias por la puntualización, ya lo sabía y pensaba que se entendía con la siguiente frase:

En cuanto definas tú un constructor te va a dar un error si no llamas a super(con los parámetros que sean).


Pero vamos, que tienes toda la razón.
7 respuestas