Ambas reutilizam um de método, mas são fundamentalmente diferentes. = mesmo nome, , na mesma classe, resolvida em . = uma subclasse um método da classe pai com a , resolvida em .
Ambas reutilizam um de método, mas são fundamentalmente diferentes. = mesmo nome, , na mesma classe, resolvida em . = uma subclasse um método da classe pai com a , resolvida em .
| Sobrecarga | Sobrescrita | |
|---|---|---|
| Assinatura | Deve diferir (params) | Deve ser idêntica |
| Relação | Mesma classe | Classe pai ↔ subclasse |
| Resolvida | Tempo de compilação (estático) | Tempo de execução (dinâmico) |
| Propósito | Conveniência / variantes | Polimorfismo |
class Printer {
void print(String s) { System.out.println(s); }
void print(int n) { System.out.println(n); } // same name, diff param
void print(String s, int times) { /* ... */ }
}
O compilador escolhe qual print usar com base nos tipos de argumento — nenhuma herança envolvida.
class Animal { String speak() { return "..."; } }
class Dog extends Animal {
@Override
String speak() { return "Woof"; } // replaces Animal.speak()
}
Animal a = new Dog();
a.speak(); // "Woof" — runtime picks Dog's version (dynamic dispatch)
Um erro frequente é sobrecarregar acidentalmente quando você pretendia fazer sobrescrita (ex: um typo na assinatura). Sempre use @Override (Java) ou override (C#) para que o compilador detecte.
A sobrescrita é o mecanismo do polimorfismo — o mecanismo em tempo de execução que faz "uma interface, muitas implementações" funcionar.
Conhecer a diferença evita um bug clássico: pensar que você substituiu um comportamento quando na verdade criou um segundo método que nunca será chamado.
Uma biblioteca de perguntas de entrevista de TI com respostas detalhadas — de Júnior a Sênior.
Doar