Programa Java para usar la anulación de métodos en herencia para subclases

La anulación de métodos en Java es cuando una subclase implementa un método que ya está presente dentro de la superclase. Con la ayuda de la anulación de métodos podemos lograr el polimorfismo en tiempo de ejecución . Cuando reemplazamos un método, debemos tener en cuenta tres cosas.

  • El método de la subclase debe tener el mismo nombre que el método presente dentro de la superclase.
  • El método de la subclase debe tener el mismo número de parámetros.
  • El tipo de retorno debe ser el mismo que el tipo de retorno del método dentro de la superclase.

En este artículo, vamos a discutir cómo podemos usar la anulación de métodos en la Herencia de subclases.

Entendamos la anulación de los métodos de las subclases con la figura que se muestra a continuación.

En la figura anterior, hemos tomado el ejemplo de la clase Grandpa que contiene solo un método, es decir, show(). La clase Dad hereda la clase Grandpa y anula el método show(). Después de eso, la clase Dad es heredada por la clase Me, que anula el método show() de la clase Dad. Después de eso, si queremos acceder al método show() de las clases anteriores, podemos crear el objeto de esa clase, ya que el método que se invocaría depende únicamente del tipo de objeto, pero no del tipo de variable de referencia que hace referencia. a ese objeto. 

Entendamos el concepto anterior usando código.

Java

// Java Program to show the overriding using inheritance in
// subclasses
  
// Grandpa class is at the top of
// the inheritance hierarchy
class Grandpa {
    public void show()
    {
        System.out.println(
            "Inside show() method of Grandpa class");
    }
}
  
class Dad extends Grandpa {
    
    // Overriding show method of Grandpa class
    @Override public void show()
    {
        System.out.println(
            "Inside show() method of Dad class");
    }
}
  
// class Me is inheriting Dad class (i.e.
// a subclass of Grandpa class)
class Me extends Dad {
    
    // Overriding show method of Dad class
    @Override public void show()
    {
        System.out.println(
            "Inside show() method of Me class");
    }
}
  
public class GFG {
    public static void main(String[] args)
    {
        // Creating instance of Grandpa class
        Grandpa grandpa = new Grandpa();
        
        // Creating instance of Dad class
        Grandpa dad = new Dad();
        
        // Creating instance of Me class
        Grandpa me = new Me();
        
        // as discussed which show() function will get
        // execute depends upon the type of object
  
        // show function of Grandpa class will get execute
        grandpa.show();
        
        // show function of Dad class will get execute
        dad.show();
        
        // show function of Me class will get execute
        me.show();
    }
}
Producción

Inside show() method of Grandpa class
Inside show() method of Dad class
Inside show() method of Me class

¿Qué sucede si una subclase contiene métodos distintos a los de la superclase padre/superclase?

Entendamos esto con la ayuda de la figura que se menciona a continuación.

En la figura de arriba, hemos tomado un método más llamado display() dentro de la clase Dad que se anula dentro de la clase Me. Ahora, si tratamos de acceder al método display() creando objetos de la clase Dad and Me respectivamente y una variable de referencia de la clase Grandpa, dará un error porque una variable de referencia de esa clase solo se puede usar para acceder a los métodos de las subclases. que se han anulado desde abajo en la jerarquía, es decir, no podemos usar aquí la variable de referencia de la clase Grandpa al llamar a la función de visualización, ya que la clase Grandpa está en la parte superior de la jerarquía y no contiene la función de visualización.

Obtendremos el siguiente error si intentamos invocar la función display() usando la variable de referencia de la clase Grandpa().

dad.display();
me.display();

GFG.java:52: error: cannot find symbol
        dad.display();
           ^
  symbol:   method display()
  location: variable dad of type Grandpa
GFG.java:53: error: cannot find symbol
        me.display();
          ^
  symbol:   method display()
  location: variable me of type Grandpa

Podemos resolver este problema haciendo que nuestra variable de referencia de tipo Dad o Me se refiera al objeto de la clase Dad and Me usando la sintaxis que se menciona a continuación.

Dad dad1 = new Dad();
Dad me1 = new Me();
dad1.display();
me1.display();

Ahora, comprendamos estos conceptos con la ayuda del código mencionado a continuación.

Java

// Java Program to show the overriding using inheritance in
// subclasses when subclass contains methods other than that
// of the parent/ superclass
  
// Grandpa class is at the top of
// the inheritance hierarchy
class Grandpa {
    public void show()
    {
        System.out.println(
            "Inside show() method of Grandpa class");
    }
}
  
class Dad extends Grandpa {
  
    // Overriding show method of Grandpa class
    @Override public void show()
    {
        System.out.println(
            "Inside show() method of Dad class");
    }
  
    // Creating a display method() for Dad class
    public void display()
    {
        System.out.println(
            "Inside display() method of class B");
    }
}
  
// class Me is inheriting Dad class (i.e.
// a subclass of Grandpa class)
class Me extends Dad {
  
    // Overriding show method of Dad class
    @Override public void show()
    {
        System.out.println(
            "Inside show() method of Me class");
    }
  
    @Override public void display()
    {
        System.out.println(
            "Inside display() method of class C");
    }
}
  
public class GFG {
    public static void main(String[] args)
    {
  
        // The code below works the same as in
        // previous example
        Grandpa grandpa = new Grandpa();
        Grandpa dad = new Dad();
        Grandpa me = new Me();
  
        grandpa.show();
        dad.show();
        me.show();
  
        // Making Dad type point to the
        // Dad object
        Dad dad1 = new Dad();
  
        // Making Dad type reference variable point to the
        // Me object
        Dad me1 = new Me();
  
        dad1.display();
        me1.display();
    }
}
Producción

Inside show() method of Grandpa class
Inside show() method of Dad class
Inside show() method of Me class
Inside display() method of class B
Inside display() method of class C

Publicación traducida automáticamente

Artículo escrito por shivamsingh00141 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *