English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Tutoriales básicos de Java

Control de flujo de Java

Java Arreglo

Java Orientado a Objetos (I)

Java Orientado a Objetos (II)

Java Orientado a Objetos (III)

Manejo de excepciones en Java

Java Lista (List)

Java Queue (cola)

Conjuntos de Java Map

Conjuntos de Java

Entrada y salida de Java (I/O)

Lector de Java/Writer

Otras temáticas de Java

Sobrescritura de métodos en Java

En este tutorial, aprenderemos sobre la sobrescripción de métodos en Java a través de ejemplos.

En el tutorial anterior, aprendimos sobre la herencia. La herencia es una propiedad de OOP que nos permite derivar una nueva clase (subclase) de una clase existente (superclase), y la subclase hereda las propiedades y métodos de la superclase.

Ahora, si se define el mismo método en la clase padre y en la subclase, el método de la subclase sobrescribirá el método de la superclase. Esto se llama sobrescripción de métodos (o sobrescritura de métodos).

Ejemplo1: Sobrescribe el método

class Animal {
   public void displayInfo() {
      System.out.println("Soy un animal.");
   }
}
class Dog extends Animal {
   @Override
   public void displayInfo() {
      System.out.println("Soy un perro.");
   }
}
class Main {}}
   public static void main(String[] args) {
      Dog d1 = new Dog();
      d1.displayInfo();
   }
}

salida:

Soy un perro.

En el programa anterior, el método displayInfo() existe tanto en la clase padre Animal como en la subclase Dog.

Cuando usamos d1Cuando un objeto (un objeto de subclase) llama a displayInfo(), se llama al método displayInfo() de la subclase Dog. El método displayInfo() de la subclase sobrescribe el método idéntico de la superclase.

Tenga en cuenta que en nuestro ejemplo se utilizó la anotación @Override. En Java, los comentarios son metadatos que utilizamos para proporcionar información al compilador. Aquí, la anotación @Override le indica al compilador que el método después de esta anotación sobrescribirá el método de la superclase.

El uso de @Override no es obligatorio. Sin embargo, cuando usamos este método, debe seguir todas las reglas de sobrescripción. De lo contrario, el compilador generará errores.

Reglas de sobrescripción en Java

  • El padre y la subclase deben tener el mismo nombre de método, el mismo tipo de retorno y la misma lista de parámetros.

  • No podemos sobrescribir métodos declarados como final y static.

  • Siempre deberíamos sobrescribir los métodos abstractos de la superclase (se discutirá en futuros tutoriales).

Palabra clave super en la sobrescripción de Java

Un problema común que se presenta al sobrescribir en Java es:

 ¿Podemos acceder a métodos de la superclase después de la sobrescripción?

La respuesta esPositivo. Para acceder a métodos de la superclase desde la subclase, usamos la palabra clave super.

Ejemplo2:Uso de la palabra clave super

class Animal {
   public void displayInfo() {
      System.out.println("Soy un animal.");
   }
}
class Dog extends Animal {
   public void displayInfo() {
      super.displayInfo();
      System.out.println("Soy un perro.");
   }
}
class Main {}}
   public static void main(String[] args) {
      Dog d1 = new Dog();
      d1.displayInfo();
   }
}

salida:

Soy un animal.
Soy un perro.

En el ejemplo anterior, la subclase Dog sobrescribe el método displayInfo() de la superclase Animal.

Cuando usamos el d de la subclase Dog1Cuando un objeto llama al método displayInfo(), se llama al método interno de la subclase Dog. No se llama al método interno de la clase padre.

Dentro del método displayInfo() de la subclase Dog, usamos super.displayInfo() para llamar al método displayInfo() del padre.

Es importante destacar que los constructores no se heredan en Java. Por lo tanto, en Java no existen problemas como la sobrescripción de constructores.

Pero, podemos llamar al constructor de la superclase desde su subclase. Para eso, usamos super(). Para obtener más información, visitePalabra clave super en Java.

Modificadores de acceso en la sobrescripción de métodos

Los métodos declarados en la clase padre y sus subclases pueden tener diferentes modificadores de acceso. Sin embargo, hay un límite.

Sólo podemos usar aquellos modificadores de acceso en la subclase que proporcionen un acceso mayor al modificador de acceso del padre. Por ejemplo,

Supongamos que el método myClass() del padre se declara como protected. Luego, el método myClass() del subclase puede ser public o protected, pero no puede ser private.

Ejemplo3:在重写中的访问修饰符

class Animal {
   protected void displayInfo() {
      System.out.println("Soy un animal.");
   }
}
class Dog extends Animal {
   public void displayInfo() {
      System.out.println("Soy un perro.");
   }
}
class Main {}}
   public static void main(String[] args) {
      Dog d1 = new Dog();
      d1.displayInfo();
   }
}

salida:

Soy un perro.

En el ejemplo anterior, la subclase Dog sobrescribe el método displayInfo() de la clase padre Animal.

Cada vez que utilicemos d1Al llamar a displayInfo() desde un objeto de la subclase, se llama al método interno de la subclase.

Nota: displayInfo() se declara como protegido (protected) en la clase padre Animal. Este método tiene un especificador de acceso público (public) en la clase hija Dog. Esto es permitido porque public proporciona un mayor nivel de permiso de acceso que protected.

Sobrescribir métodos abstractos

En Java, las clases abstractas se crean como clases padre (clase base) para otras clases. Además, si una clase contiene métodos abstractos, debe sobrescribirlos.

En los siguientes tutoriales, aprenderemos más sobre la sobrescripción de clases abstractas y métodos abstractos.