Sobrecarga y anulación de métodos

JavaJavaBeginner
Practicar Ahora

💡 Este tutorial está traducido por IA desde la versión en inglés. Para ver la versión original, puedes hacer clic aquí

Introducción

En este laboratorio, aprenderá sobre la sobrecarga de métodos y la anulación de métodos. La anulación y la sobrecarga son dos conceptos utilizados en el lenguaje de programación Java. Ambos conceptos permiten al programador proporcionar diferentes implementaciones para métodos con el mismo nombre. La sobrecarga ocurre en tiempo de compilación mientras que la anulación ocurre en tiempo de ejecución. Los métodos estáticos pueden ser sobrecargados pero no pueden ser anulados. La sobrecarga es un vínculo estático mientras que la anulación es un vínculo dinámico.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL java(("Java")) -.-> java/ObjectOrientedandAdvancedConceptsGroup(["Object-Oriented and Advanced Concepts"]) java(("Java")) -.-> java/ProgrammingTechniquesGroup(["Programming Techniques"]) java/ProgrammingTechniquesGroup -.-> java/method_overloading("Method Overloading") java/ProgrammingTechniquesGroup -.-> java/method_overriding("Method Overriding") java/ObjectOrientedandAdvancedConceptsGroup -.-> java/classes_objects("Classes/Objects") java/ObjectOrientedandAdvancedConceptsGroup -.-> java/constructors("Constructors") java/ObjectOrientedandAdvancedConceptsGroup -.-> java/oop("OOP") java/ObjectOrientedandAdvancedConceptsGroup -.-> java/inheritance("Inheritance") subgraph Lab Skills java/method_overloading -.-> lab-178549{{"Sobrecarga y anulación de métodos"}} java/method_overriding -.-> lab-178549{{"Sobrecarga y anulación de métodos"}} java/classes_objects -.-> lab-178549{{"Sobrecarga y anulación de métodos"}} java/constructors -.-> lab-178549{{"Sobrecarga y anulación de métodos"}} java/oop -.-> lab-178549{{"Sobrecarga y anulación de métodos"}} java/inheritance -.-> lab-178549{{"Sobrecarga y anulación de métodos"}} end

Sobre carga

En la parte anterior, ya hemos utilizado la sobrecarga en la clase Person ya que tenía tres constructores. Ese es un ejemplo simple. La sobrecarga es una característica que permite que una clase tenga más de un método con el mismo nombre. De esta manera, podemos manejar diferentes situaciones y no nos confundiremos. Típicamente, hay tres maneras de lograr la sobrecarga:

  • Diferente número de parámetros
  • Diferentes tipos de parámetros
  • Diferente orden de diferentes tipos de parámetros

Ejemplo:

Escriba el siguiente código en el archivo /home/labex/project/overloadingTest.java:

public class overloadingTest{
    public static void main(String[] args){
        overloadingTest test = new overloadingTest();
        System.out.println("add(10,20)= " + test.add(10,20));
        System.out.println("add(10,20,30)= " + test.add(10,20,30));
        System.out.println("add(5.5, 10.5)= " + test.add(5.5f, 10.5f));

        test.printInfo(1, "an error!");
        test.printInfo("another error!", 2);
    }
    // este método tiene dos parámetros int, devuelve un entero
    int add(int a, int b){
        return a+b;
    }
    // este método tiene tres parámetros int, devuelve un entero
    int add(int a, int b, int c){
        return a+b+c;
    }
    // este método tiene dos parámetros float, devuelve un número float
    float add(float a, float b){
        return a+b;
    }
    // este método tiene un parámetro string y un parámetro int, no devuelve nada
    void printInfo(String str, int code){
        System.out.println("Code: " + code + "\nMessage: " + str);
    }
    // este método tiene un parámetro int y un parámetro string, no devuelve nada
    void printInfo(int code, String str){
        System.out.println("Code: " + code + "\nMessage: " + str);
    }
}

Salida:

Ejecute el archivo overloadingTest.java usando los siguientes comandos:

javac /home/labex/project/overloadingTest.java
java overloadingTest

Ver la salida:

add(10,20)= 30
add(10,20,30)= 60
add(5.5, 10.5)= 16.0
Code: 1
Message: an error!
Code: 2
Message: another error!

Anulación de métodos

Si una clase hereda un método de su superclase, entonces existe la posibilidad de anular el método siempre y cuando no esté marcado como final o private. Al anular un método, podemos definir un comportamiento específico de la subclase, lo que significa que una subclase puede implementar un método de la clase padre según sus necesidades. En la programación orientada a objetos, anular un método significa reemplazar la funcionalidad de un método existente. El tipo de retorno debe ser el mismo o un subtipo del tipo de retorno declarado en el método original (anulado) de la superclase. El nivel de acceso no puede ser más restrictivo que el nivel de acceso del método anulado. Por ejemplo: Si un método de la superclase está declarado como public, entonces el método anulador en la subclase no puede ser private ni protected. También usamos el caso de Animal (una versión simple).

Ejemplo:

Escriba el siguiente código en el archivo /home/labex/project/overridingTest.java:

class Animal{
    public void grow(){
        System.out.println("I'm animal, I grow up.");
    }
    public void sleep(){
        System.out.println("I'm animal, I am sleeping.");
    }
}
class Dog extends Animal{
    // método anulador
    public void grow(){
        System.out.println("I'm dog, I grow up.");
    }
}
class Bird extends Animal{
    // mantener el método grow() de la superclase, agregar sus propias declaraciones
    // método anulador
    public void grow(){
        super.grow();
        System.out.println("I'm bird, I grow up.");
    }
    // método anulador
    public void sleep(){
        System.out.println("I'm bird, I am sleeping...");
    }
    // método propio de Bird
    public void sing(){
        System.out.println("I'm bird, I am singing a song...");
    }
}
public class overridingTest{
    public static void main(String[] args){
        Dog dog = new Dog();
        dog.grow();
        Bird bird = new Bird();
        bird.grow();
    }
}

Salida:

Ejecute el archivo overridingTest.java usando los siguientes comandos:

javac /home/labex/project/overridingTest.java
java overridingTest

Ver la salida:

I'm dog, I grow up.
I'm animal, I grow up.
I'm bird, I grow up.

Resumen

Para organizar un gran proyecto, se necesita una buena idea de arquitectura, por lo que debes conocer los conceptos esenciales cubiertos en este laboratorio. La anulación y la sobrecarga nos proporcionan más flexibilidad para utilizar los métodos.