Sobes.tech
Middle

Fale sobre as regras de sobrecarga de métodos.

sobes.tech IA

Resposta da IA

A sobrecarga de métodos (Method Overloading) na programação orientada a objetos permite definir vários métodos numa mesma classe com o mesmo nome, mas com assinaturas diferentes.

Regras principais para a sobrecarga de métodos:

  1. Diferença nas assinaturas: A assinatura de um método inclui o nome do método e a lista de tipos dos seus parâmetros na ordem correspondente. Para que os métodos sejam considerados sobrecarregados, suas assinaturas devem ser diferentes.

    // Exemplos de assinaturas diferentes
    void print(int i) { }
    void print(String s) { }
    void print(int i, String s) { }
    void print(String s, int i) { } // Ordem diferente dos parâmetros
    
  2. O nome do método deve ser o mesmo: Os métodos sobrecarregados devem ter o mesmo nome.

    // Exemplo correto de sobrecarga
    class Example {
        void process(int a) { }
        void process(double b) { }
    }
    
  3. O tipo de retorno não faz parte da assinatura: Alterar apenas o tipo de retorno não torna os métodos sobrecarregados. O compilador não consegue distinguir qual método chamar se as assinaturas dos parâmetros forem iguais.

    // Não é sobrecarga - erro de compilação
    int calculate() { return 1; }
    String calculate() { return "error"; }
    
  4. Modificadores de acesso e especificadores de exceções não afetam a sobrecarga: Assim como o tipo de retorno, alterar apenas os modificadores de acesso (public, private, protected, default) ou a lista de exceções lançadas (throws) não leva à sobrecarga.

    // Não é sobrecarga - erro de compilação se as assinaturas dos parâmetros forem iguais
    public void doSomething() { }
    private void doSomething() { }
    
  5. A ordem dos parâmetros importa: Alterar a ordem dos tipos de parâmetros torna as assinaturas diferentes.

    // É sobrecarga
    void setup(int width, int height) { }
    void setup(int height, String unit) { } // Difere pelo segundo parâmetro
    void setup(String unit, int size) { } // Difere pelo tipo e pela ordem dos parâmetros
    
  6. A quantidade de parâmetros importa: Quantidades diferentes de parâmetros levam a assinaturas diferentes.

    // É sobrecarga
    void log(String message) { }
    void log(String message, int level) { }
    

Assim, o fator chave para a sobrecarga é a singularidade da assinatura do método, que é determinada pelo seu nome e pelo conjunto (tipos e ordem) dos seus parâmetros.