La palabra clave super en java es una variable de referencia que se utiliza para hacer referencia a objetos de clase principal. La palabra clave “super” entró en escena con el concepto de Herencia. Se utiliza principalmente en los siguientes contextos:
1. Uso de super con variables: este escenario ocurre cuando una clase derivada y una clase base tienen los mismos miembros de datos. En ese caso, existe la posibilidad de ambigüedad para la JVM. Podemos entenderlo más claramente usando este fragmento de código:
/* Base class vehicle */ class Vehicle { int maxSpeed = 120; } /* sub class Car extending vehicle */ class Car extends Vehicle { int maxSpeed = 180; void display() { /* print maxSpeed of base class (vehicle) */ System.out.println("Maximum Speed: " + super.maxSpeed); } } /* Driver program to test */ class Test { public static void main(String[] args) { Car small = new Car(); small.display(); } }
Producción:
Maximum Speed: 120
En el ejemplo anterior, tanto la clase base como la subclase tienen un miembro maxSpeed. Podríamos acceder a maxSpeed de la clase base en la subclase usando la palabra clave super.
2. Uso de super con métodos: Esto se usa cuando queremos llamar al método de la clase padre. Entonces, cada vez que una clase principal y una secundaria tienen métodos con el mismo nombre, para resolver la ambigüedad usamos la palabra clave super. Este fragmento de código ayuda a comprender dicho uso de la palabra clave super.
/* Base class Person */ class Person { void message() { System.out.println("This is person class"); } } /* Subclass Student */ class Student extends Person { void message() { System.out.println("This is student class"); } // Note that display() is only in Student class void display() { // will invoke or call current class message() method message(); // will invoke or call parent class message() method super.message(); } } /* Driver program to test */ class Test { public static void main(String args[]) { Student s = new Student(); // calling display() of Student s.display(); } }
Producción:
This is student class This is person class
En el ejemplo anterior, hemos visto que si solo llamamos al método message() entonces, se invoca la clase actual message() pero con el uso de la palabra clave super, también se podría invocar el mensaje() de la superclase.
3 . Uso de super con constructores: la palabra clave super también se puede utilizar para acceder al constructor de la clase principal. Una cosa más importante es que «super» puede llamar tanto a constructores paramétricos como no paramétricos dependiendo de la situación. El siguiente es el fragmento de código para explicar el concepto anterior:
/* superclass Person */ class Person { Person() { System.out.println("Person class Constructor"); } } /* subclass Student extending the Person class */ class Student extends Person { Student() { // invoke or call parent class constructor super(); System.out.println("Student class Constructor"); } } /* Driver program to test*/ class Test { public static void main(String[] args) { Student s = new Student(); } }
Producción:
Person class Constructor Student class Constructor
En el ejemplo anterior, hemos llamado al constructor de la superclase usando la palabra clave ‘super’ a través del constructor de la subclase.
Otros puntos importantes:
- La llamada a super() debe ser la primera declaración en el constructor de Clase Derivada (Estudiante).
- Si un constructor no invoca explícitamente a un constructor de superclase, el compilador de Java inserta automáticamente una llamada al constructor sin argumentos de la superclase. Si la superclase no tiene un constructor sin argumentos, obtendrá un error de tiempo de compilación. Object tiene dicho constructor, por lo que si Object es la única superclase, no hay problema.
- Si un constructor de subclase invoca a un constructor de su superclase, ya sea explícita o implícitamente, podría pensar que se llama a toda una string de constructores, hasta el constructor de Object. Este, de hecho, es el caso. Se llama enstringmiento de constructores .
Este artículo es una contribución de Vishwajeet Srivastava . Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.
Publicación traducida automáticamente
Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA