Qual o conceito correto de sobrecarga ? duvidoso - qual adotar?

Conceito de sobrecarga: esse é uma questão de concurso, daí surgiu a dúvida sobre o conceito de sobrecarga de método.

Questão UFT/COPESE - O Conceito de sobrecarga permite que uma classe possa conter mais de um método do mesmo nome, contanto que cada um dos tenha um conjunto distinto de tipos de parâmetros, inclusive o tipo de retorno.

Questionamento:

O conceito de sobrecarga abrange apenas o NOME da função e seus PARÂMENTROS, OU inclui tbem , tipo de retorno; modificador de acesso; exceções verificadas novas ou mais abrangentes. ? na questão diz que inclui tmb tipo de retorno por exemplo.

Segundo esse conteúdo desse link, inclui parametros, tipo retrono e ETC.

Segundo Marcio Victorino, Doutor pela UNB/2011, professor do Cathedra, em um curso ministrado no LFG: "polimorfismo ocorre também quando existem dois métodos com mesmo nome, na mesma classe com e assinaturas diferentes. O método será escolhido de acordo com o número de parâmetros, tipo ou valor de retorno esperado

Agora Existe um segundo grupo, que entende que a sobrecarga é apenas realciona ao nome da função e ao parâmentros.
UML, guia do usuário, 2ed. pág 451 diz que a assinatura é o nome e os parâmetros da operação.

Trecho do livro C++ Black Book, pág, 298.: “Da mesma forma que funções, podemos sobrecarregar métodos e contrutores. Quando sobrecarregamos um método ou construtor, redefinimos o método ou construtor usando uma lista DE ARGUMENTOS (parâmetros), ou assinatura.”. Notem que o autor nem cita o tipo de retorno como parte da assinatura do método.

Gostaria de uma fonte mais segura, tipo como algum comentário do Joshua Bloch - um dos banban do java, criado de várias classe do java, ou de outros autores do java tbem. alguém tem alguma fonte segura, desses pessoas que criaram a linguagem fazendo algum comentário ?

Os métodos sobrecarregados permitirão que você reutilize o mesmo nome de método em uma classe, mas com argumentos diferentes ( e opcionalmente, com um tipo de retorno diferente).
As regras são as seguintes:

  • Os métodos sobrecarregados DEVEM alterar a lista de argumentos;
  • Os métodos sobrecarregados PODEM alterar o tipo de retorno;
  • Os métodos sobrecarregados PODEM alterar o modificador de acesso;
  • Os métodos sobrecarregados PODEM declarar exceções verificadas novas ou mais abrangentes.

[quote=romarcio]Os métodos sobrecarregados permitirão que você reutilize o mesmo nome de método em uma classe, mas com argumentos diferentes ( e opcionalmente, com um tipo de retorno diferente).
As regras são as seguintes:

  • Os métodos sobrecarregados DEVEM alterar a lista de argumentos;
  • Os métodos sobrecarregados PODEM alterar o tipo de retorno;
  • Os métodos sobrecarregados PODEM alterar o modificador de acesso;
  • Os métodos sobrecarregados PODEM declarar exceções verificadas novas ou mais abrangentes.
    [/quote]

romarcio, até ai tudo bem, como vc pode ver essa opnião é dividida, nessa sua opnião não vir nenhum autor renomado falar algo, tipo estou procurando
alguma coisa que o Joshua Bloch autor do livro Effective Java, um dos principais responsáveis pelo Java, tenha falado, estou procuando fonte segura entende,
esse autores medianos, um fala coisa e uns falam outras.

Conhece algum criador do Java que fez algum comentário sobre esse conceito ?

A fonte original do que postei para você se encontra no Livro: SCJP Sun® Certified Programmer for Java? 6 Study Guide Exam (310-065) - Kathy Sierra and Bert Bates. Pág. 109-110.

Acho que seja uma fonte segura para o que você procura.

[quote]Overloaded Methods
You’re wondering what overloaded methods are doing in an OO chapter, but we’ve included them here since one of the things newer Java developers are most confused about are all of the subtle differences between overloaded and overridden methods. Overloaded methods let you reuse the same method name in a class, but with different arguments (and optionally, a different return type). Overloading a method often means you’re being a little nicer to those who call your methods, because your code takes on the burden of coping with different argument types rather than forcing the caller to do conversions prior to invoking your method.

The rules are simple:
■ Overloaded methods MUST change the argument list.
■ Overloaded methods CAN change the return type.
■ Overloaded methods CAN change the access modifier.
■ Overloaded methods CAN declare new or broader checked exceptions.
■ A method can be overloaded in the same class or in a subclass. In other words, if class A defines a doStuff(int i) method, the subclass B could define a doStuff(String s) method without overriding the superclass version that takes an int. So two methods with the same name but in different classes can still be considered overloaded, if the subclass inherits one version of the method and then declares another overloaded version in its class definition.[/quote]

Cara, acho que não tem o que discutir, vamos falar em Java, ja que você especificou isso.

você não tem como ter 2 métodos com mesmo nome, e os mesmos parâmetros na assinatura, mesmo que altere modificadores, exceções lançadas e tipo de retorno

pode alterar o que quiser na assinatura do seu método, se o nome e os parâmetros recebidos forem os mesmos, não vai compilar.

Bom, o romárcio falou tudo né, e os autores do livro, são pessoas que desenvolveram a prova de certificação, e são fundadores de uns dos maiores foruns voltados a certificação java, o “www.javaranch.com”, tirei a certificação a pouco tempo, e usei a abordagem citada pelo romárico, já que usei o livro citado para me preparar, se formos testar em código, vamos verificar que são todas verdades citadas no livro.

PS: Não confunda overload com override, são diferentes.

Já ouviu falar de vários construtores numa classe?

Ou mesmo o System.out.prinln(), que aceita tanto Objects quantos primitivos?

Isso são overload.

Override você verá em herança.