En Java, al ser un lenguaje orientado a objetos, los objetos dentro de una clase se crean con la ayuda de constructores. Cuando se trata de herencia en Java, básicamente tratamos de derivar una clase de otra clase. Ahora, comprendamos la herencia un paso más profundo, de modo que cuando una clase en particular hereda una clase, tenemos una palabra clave que usamos para referirnos al constructor principal a través de la palabra clave super .
Se utiliza como sufijo seguido del “.” operador en constructor/es en una clase. Esta propiedad de la clase principal (superclase) también se inicia mucho antes de que la clase secundaria (subclase) los herede y los use.
Nota: Es obligatorio que cuando se crea un objeto, se llame al constructor, pero no es obligatorio cuando se llama a un constructor, la creación de objetos es obligatoria.
Ya hemos visto anteriormente cuando creamos un objeto de una subclase, se llama al constructor de la misma clase, si no se hace, se llama al constructor predeterminado mientras llamamos al constructor de la superclase sin crear un objeto de clase dentro de la subclase a través de una palabra clave.
En herencia, la subclase adquiere propiedades de superclase. Un punto importante a tener en cuenta es que, cuando se crea un objeto de subclase, no se creará un objeto separado de un objeto de superclase. Solo se crea un objeto de subclase que tiene variables de superclase. Esta situación es diferente de la suposición normal de que una llamada de constructor significa que se crea un objeto de la clase, por lo que no podemos decir ciegamente que cada vez que se ejecuta un constructor de clase, el objeto de esa clase se crea o no.
Ejemplo:
Java
// Java program to demonstrate that Both Super Class // and Subclass Constructors Refer to Same Object // Importing required classes import java.util.*; // Class 1 // Super Class class Fruit { // Method inside super class public Fruit() { // Print statement System.out.println("Super class constructor"); // Displaying object hashcode of super class System.out.println("Super class object hashcode :" + this.hashCode()); System.out.println(this.getClass().getName()); } } // Class 2 // Sub class extending above super class class Apple extends Fruit { // Method inside sub class public Apple() { // Print statement System.out.println("Subclass constructor invoked"); // Displaying object hashcode of sub class System.out.println("Sub class object hashcode :" + this.hashCode()); System.out.println(this.hashCode() + " " + super.hashCode()); System.out.println(this.getClass().getName() + " " + super.getClass().getName()); } } // Class 3 // Main class public class GFG { // Main driver method public static void main(String[] args) { // Creating an instance of above class // inside main() method Apple myApple = new Apple(); } }
Super class constructor Super class object hashcode :1149319664 Apple Subclass constructor invoked Sub class object hashcode :1149319664 1149319664 1149319664 Apple Apple
Explicación de salida: como podemos ver, tanto el código hash del objeto de la superclase (Fruit) como el código hash del objeto de la subclase (Apple) son iguales, por lo que solo se crea un objeto. Este objeto es de clase Apple (subclase) ya que cuando intentamos imprimir el nombre de la clase en la que se crea el objeto, está imprimiendo Apple, que es una subclase.
Este artículo es una contribución de Gaurav Miglani . Si te gusta GeeksforGeeks y te gustaría contribuir, también puedes escribir un artículo usando write.geeksforgeeks.org o enviar tu artículo por correo a review-team@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks. 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