Sobrecarga de Métodos

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.