Sobrecarga de métodos é utilizar o mesmo método várias vezes numa mesma classe.
Como seria representada uma sobrecarga em linha de código?
Não.
Sobrecarga de métodos é ter mais de um método com mesmo nome, porém, com argumentos diferentes.
Oi,
[quote=drsmachado]Não.
Sobrecarga de métodos é ter mais de um método com mesmo nome, porém, com argumentos diferentes.[/quote]
Em outras palavras, em Java, métodos podem ter o mesmo nome desde que não sejam ambíguos, isto é, que exista uma maneira de distinguir no momento da chamada.
Tchauzin!
Bruno Uma sobrecarga de método seria 2 metodos com o mesmo nome porem com parametros diferentes. Por exemplo
[code] …
public void carregarVeiculo(String nomeVeiculo, String placaVeiculo){
// Carrega os veiculos de acordo com o nome e placa
}
public void carregarVeiculo(int ano){
//Carrega os veiculos de acordo com o ano
}
[/code]
Perceba que o nome dos metodos são os mesmos porém possuem parametros diferentes! Isso seria uma sobrecarga como o drsmachado já explicou. Apenas quis exemplificar para ficar mais facil de entender!
Valeu
[quote=lucas.vigano]Bruno Uma sobrecarga de método seria 2 metodos com o mesmo nome porem com parametros diferentes. Por exemplo
[code] …
public void carregarVeiculo(String nomeVeiculo, String placaVeiculo){
// Carrega os veiculos de acordo com o nome e placa
}
public void carregarVeiculo(int ano){
//Carrega os veiculos de acordo com o ano
}
[/code]
Perceba que o nome dos metodos são os mesmos porém possuem parametros diferentes! Isso seria uma sobrecarga como o drsmachado já explicou. Apenas quis exemplificar para ficar mais facil de entender!
Valeu
[/quote]
Corrigindo, 2 ou mais métodos.
O que acontece é que a JVM consegue ler todos os métodos das classes. Quando um objeto chama um determinado método, a identificação de qual será executado se dá pelo nome do método + quantidade e tipo de argumentos passados.
Isso explica (entre outras coisas) por que Java não permite uso de herança múltipla.
O que isso tem a ver com herança múltipla? Pode elaborar melhor?
Posso estar completamente errado, mas se as classes pai A e B tivessem um método com mesmo nome e mesmos argumentos, como a JVM poderia definir qual deles está sendo invocado na classe filha C, quando há uma chamada ao método?
public class C extends A, B{
public static void main(String[] args){
C c = new C();
c.metodoComMesmoNomeEArgumentos();
}
}
O que isso tem a ver com herança múltipla? Pode elaborar melhor?[/quote]
Eu não conheço todos ou o “principal” motivo da herança múltipla não funcionar em Java, mas um dos motivos é que se tiver dois “pais” exatamente com o mesmo método (assinatura) a JVM não saberia identificar qual exatamente utilizar. Asneira ou é coerente ?
Abraços.
Posso estar completamente errado, mas se as classes pai A e B tivessem um método com mesmo nome e mesmos argumentos, como a JVM poderia definir qual deles está sendo invocado na classe filha C, quando há uma chamada ao método?
public class C extends A, B{
public static void main(String[] args){
C c = new C();
c.metodoComMesmoNomeEArgumentos();
}
}
[/quote]
É que dai não é problema de sobrecarga. Isso é inválido se fizer, inclusive, na mesma classe.
Esse problema existe em todas as linguagens com herança múltipla. Se você quiser fornecer o mecanismo, é obrigado a fornecer também uma forma de desambiguação.
No C++, a forma escolhida foi forçar o programador a reimplementar o método no filho, e especificar de qual pai está chamando.
O duro é quando vc vai no famoso Diamante da Morte.
Ou seja, tem uma classe A.
Tem B e C que herdam A.
Tem D que herda de B e C.
O que ocorre é que em D existem duas superclasses “A”. A que vem de B e a que vem de C. E aí vc é obrigado a fornecer desambiguação para tudo e em todas as vezes que quiser fazer uma chamada a super.
Esse inconveniente realmente é um dos motivos pelo qual não existe herança múltipla.
Esse problema existe em todas as linguagens com herança múltipla. Se você quiser fornecer o mecanismo, é obrigado a fornecer também uma forma de desambiguação.
No C++, a forma escolhida foi forçar o programador a reimplementar o método no filho, e especificar de qual pai está chamando.
O duro é quando vc vai no famoso Diamante da Morte.
Ou seja, tem uma classe A.
Tem B e C que herdam A.
Tem D que herda de B e C.
O que ocorre é que em D existem duas superclasses “A”. A que vem de B e a que vem de C. E aí vc é obrigado a fornecer desambiguação para tudo e em todas as vezes que quiser fazer uma chamada a super.
Esse inconveniente realmente é um dos motivos pelo qual não existe herança múltipla.[/quote]
Entendo. É que eu sabia que o C++ tinha suporte a herança múltipla, só não tinha o conhecimento de como isso era resolvido lá.
Grato pela explicação.