Boa tarde a todos
P4uloJ4va:
Só para desencargo de uma dúvida, em um programa só pode ter apenas uma classe public não?
No exemplo acima tem 2, no caso o programa nem iria compilar.
É isso mesmo?
Obrigado.
Respondendo essa pergunta, nada impede de voce ter várias classes públicas em um programa, no mesmo pacote ou em pacotes diferentes, acho que voce queria perguntar se pode ter mais de um classe pública em um arquivo com extensão java com o mesmo nome da classe e isso é que não pode.
Assim como na linguagem Object Pascal do Delphi, a linguagem java entende que um arquivo com o mesmo nome da classe com a extensão *.java é uma unidade da classe, no Delphi temos a Unit que também é uma unidade da classe.
Voltando ao foco do método sobrecarregado, creio eu que muitos já explicaram como funciona porém não explicaram qual a finalidade de sobrecarregar os métodos,
A real finalidade concentra-se mais nos construtores, onde voce ter mais de um construtor sobrecarregado permite voce instanciar a classe de várias maneiras e passando vários parâmetros de diversas maneiras, inicializando assim vários atributos, muito embora no Java um construtor não seja considerado método, o que eu realmente até hoje não consigo engolir esta, pois o construtor se comporta como método.
Outra finalidade da sobrecarga é voce poder sobrecarregar métodos já existentes, por exemplo dentro da API Swing do java, na construção de uma interface gráfica. Tomemos por exemplo o método setBorder que está declarado na Classe JComponente desta forma:
public void setBorder(Border border) {
Border oldBorder = this.border;
this.border = border;
firePropertyChange("border", oldBorder, border);
if (border != oldBorder) {
if (border == null || oldBorder == null ||
!(border.getBorderInsets(this).equals(oldBorder.getBorderInsets(this)))) {
revalidate();
}
repaint();
}
}
Suponhamos que voce não quer mais utilizar o método acima da forma que foi declarado, mais sim dinamizando-o passando outros parâmetros, assim
public void setBorder(Color color, int thickness){
setBorder(BorderFactory.createLineBorder(color, thickness));
}
Repare que no novo método setBorder, voce pode além de definir a grossura da bordar, pode também definir a sua a cor e nas novas classes que herde de JComponent, como por exemplo um JPanel, que voce o declarar, ainda tem a opção de utilizar o método setBorder da classe JComponent.
Esta é uma das finalidades de sobrecarregar os métodos, o que nos proporciona uma vantagem incrível, valendo lembrar, como voce pode ver, que a sobrecarga de métodos é tanto possível ser feita em classes herdadas como ser feita na mesma classe, enquanto que a sobrescrita só pode ser feita na sub classe, porém isto é uma outra história.