superclase - que significa super() java
¿Cuándo uso super()? (11)
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?
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
De la page documentación de page :
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 sintaxis 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 compilador 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 compilación.
Publicación relacionada:
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.
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");
}
}
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".
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();
}
}
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.
Super llamará a su método principal. Ver: http://leepoint.net/notes-java/oop/constructors/constructor-super.html
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
super
se utiliza para llamar al constructor
, los methods
y las properties
de la clase principal.