Pessoal, ajudem a resolver essa questao de sobrecarga

18 respostas
L

Olá pessoal. Sou muito novato em JAVA e preciso resolver essa questão de prova. Me ajudem a entender isso. Sei que pra vocês deve ser fácil, mas to estudando JAVA há apenas 2 semanas. Li outros tópicos sobre sobrecarga, mas nada direcionado a isso.

PERGUNTA: Considerando a sobrecarga de métodos, para as classes abaixo, em cada uma das 5 chamadas ao método somaValores na classe Teste, identifique qual forma do método será chamada: a primeira, segunda ou terceira forma. Justifique sua resposta.

import javax.swing.*;

public class Sobrecarga {

public int somaValores (int a, int b) {
return a+b;
}
public double somaValores (double a, int b) {
return a+b;
}
public double somaValores (double a, double b) {
return a+b;
}

}

public class Teste {

public static void main(String args[]) {

Sobrecarga ob = new Sobrecarga(); 

int a = 1;
int b = 2;
int x = 3;
double c = 4;
double d = 5;

JOptionPane.showMessageDialog(null, ob.somaValores(c,a));
JOptionPane.showMessageDialog(null, ob.somaValores(d,a));
JOptionPane.showMessageDialog(null, ob.somaValores(a,b));
JOptionPane.showMessageDialog(null, ob.somaValores(c,d));
JOptionPane.showMessageDialog(null, ob.somaValores(x,a));

}
}

18 Respostas

Vingdel

Por favor, edite sua postagem e coloque seu código entre as tags [ code] CODIGO AQUI [ /code] (sem espaço dentro dos colchetes).

Obrigado!

L

Vingdel:
Por favor, edite sua postagem e coloque seu código entre as tags [ code] CODIGO AQUI [ /code] (sem espaço dentro dos colchetes).

Obrigado!

Pode me ajudar windgel?

Vingdel

Olá amigo, lvictor!

Obrigado por atender ao pedido. Faça sempre isso quando for postar um código no fórum, além disso, faça ele identado corretamente, pois tudo isso facilita muito a ler seu código.

Bom, métodos sobrecarregados são métodos com o mesmo nome, porém seu parâmetros são diferentes ou em quantidade ou em tipo. Portanto basta você observar os parâmetros passados nas chamadas dos métodos e comparar com os parâmetros de de onde ele é criado.

Espero que isso te ajude.

Abraço e bons estudos!

L

Vingdel:
Olá amigo, lvictor!

Obrigado por atender ao pedido. Faça sempre isso quando for postar um código no fórum, além disso, faça ele identado corretamente, pois tudo isso facilita muito a ler seu código.

Bom, métodos sobrecarregados são métodos com o mesmo nome, porém seu parâmetros são diferentes ou em quantidade ou em tipo. Portanto basta você observar os parâmetros passados nas chamadas dos métodos e comparar com os parâmetros de de onde ele é criado.

Espero que isso te ajude.

Abraço e bons estudos!

Obrigado pela resposta imediata. O problema é que sou tão novato que ainda n sei colocar em pratica na questao esse conceito que você me deu. Queria uma explicação em cima da questão. Sei que é pedir demais, mas peço que me ajudem . Abraços

R

Como o Vingdel disse basta verificar a assinatura do metodo e o tipo do objeto que vc esta
passando, para saber metodo sobrecarregado sera invocado.

Resposta:

somaValores(c,a) invoca o metodo int somaValores (double a, int b)

somaValores(d,a) invoca o metodo int somaValores (double a, int b)

somaValores(a,b) invoca o metodo int somaValores (int a, int b)

somaValores(c,d) invoca o metodo int somaValores (double a, double b)

somaValores(x,a) invoca o metodo int somaValores (int a, int b)
L

rafaelps.java:
Como o Vingdel disse basta verificar a assinatura do metodo e o tipo do objeto que vc esta
passando, para saber metodo sobrecarregado sera invocado.

Resposta:

somaValores(c,a) invoca o metodo int somaValores (double a, int b)

somaValores(d,a) invoca o metodo int somaValores (double a, int b)

somaValores(a,b) invoca o metodo int somaValores (int a, int b)

somaValores(c,d) invoca o metodo int somaValores (double a, double b)

somaValores(x,a) invoca o metodo int somaValores (int a, int b)</blockquote>

Mas por exemplo: o metodo int somaValores (int a, int b) não deve receber apenas os valores das variaveis a e b? Ou pode receber c e d bastando estas duas serem do tipo int? Veja se me entende. Quero saber se tanto faz as letras em a e b no metodo int somaValores (int a, int b), poderia ser x e y ao inves de a e b (int y, int x) e mesmo assim eu poderia usar os valores das variaveis c e d? É confuso, mas veja se entende.

alexandref93
lvictor:
Olá pessoal. Sou muito novato em JAVA e preciso resolver essa questão de prova. Me ajudem a entender isso. Sei que pra vocês deve ser fácil, mas to estudando JAVA há apenas 2 semanas. Li outros tópicos sobre sobrecarga, mas nada direcionado a isso.

PERGUNTA: Considerando a sobrecarga de métodos, para as classes abaixo, em cada uma das 5 chamadas ao método somaValores na classe Teste, identifique qual forma do método será chamada: a primeira, segunda ou terceira forma. Justifique sua resposta.

import javax.swing.*;

public class Sobrecarga {

public int somaValores (int a, int b) {
return a+b;
}
public double somaValores (double a, int b) {
return a+b;
}
public double somaValores (double a, double b) {
return a+b;
}

}

public class Teste {

public static void main(String args[]) {

Sobrecarga ob = new Sobrecarga(); 

int a = 1;
int b = 2;
int x = 3;
double c = 4;
double d = 5;

JOptionPane.showMessageDialog(null, ob.somaValores(c,a));
JOptionPane.showMessageDialog(null, ob.somaValores(d,a));
JOptionPane.showMessageDialog(null, ob.somaValores(a,b));
JOptionPane.showMessageDialog(null, ob.somaValores(c,d));
JOptionPane.showMessageDialog(null, ob.somaValores(x,a));

}
}

Olá Ivictor!!

Bem, primeiro tenha em mente de que sobrecarga de métodos, é mais que um método com mesmo nome, porém com assinatura diferente, ou com parâmetro diferente, váriaveis diferente etc... como no seu caso, tem dois métodos praticamente iguais, que retorna um double, que no caso não vai funcionar, até por que não faz sentido ter dois métodos puramente iguais... :D !!!
e tb tenha em mente que double é maior int. caso ainda não conhece direito estude sobre as variaveis primitivos.
então como na primeira chamado do método tem um valor c que é double e valor a é int, ele vai executar o método que retorna double por causa que double é maior que int, e sobrecarga de métodos sempre executar o valor maior, entendeu mais ou menos???
consegue descobrir o resto jah???

L
alexandref93:
lvictor:
Olá pessoal. Sou muito novato em JAVA e preciso resolver essa questão de prova. Me ajudem a entender isso. Sei que pra vocês deve ser fácil, mas to estudando JAVA há apenas 2 semanas. Li outros tópicos sobre sobrecarga, mas nada direcionado a isso.

PERGUNTA: Considerando a sobrecarga de métodos, para as classes abaixo, em cada uma das 5 chamadas ao método somaValores na classe Teste, identifique qual forma do método será chamada: a primeira, segunda ou terceira forma. Justifique sua resposta.

import javax.swing.*;

public class Sobrecarga {

public int somaValores (int a, int b) {
return a+b;
}
public double somaValores (double a, int b) {
return a+b;
}
public double somaValores (double a, double b) {
return a+b;
}

}

public class Teste {

public static void main(String args[]) {

Sobrecarga ob = new Sobrecarga(); 

int a = 1;
int b = 2;
int x = 3;
double c = 4;
double d = 5;

JOptionPane.showMessageDialog(null, ob.somaValores(c,a));
JOptionPane.showMessageDialog(null, ob.somaValores(d,a));
JOptionPane.showMessageDialog(null, ob.somaValores(a,b));
JOptionPane.showMessageDialog(null, ob.somaValores(c,d));
JOptionPane.showMessageDialog(null, ob.somaValores(x,a));

}
}

Olá Ivictor!!

Bem, primeiro tenha em mente de que sobrecarga de métodos, é mais que um método com mesmo nome, porém com assinatura diferente, ou com parâmetro diferente, váriaveis diferente etc... como no seu caso, tem dois métodos praticamente iguais, que retorna um double, que no caso não vai funcionar, até por que não faz sentido ter dois métodos puramente iguais... :D !!!
e tb tenha em mente que double é maior int. caso ainda não conhece direito estude sobre as variaveis primitivos.
então como na primeira chamado do método tem um valor c que é double e valor a é int, ele vai executar o método que retorna double por causa que double é maior que int, e sobrecarga de métodos sempre executar o valor maior, entendeu mais ou menos???
consegue descobrir o resto jah???

O que o rafaelps.java disse está correto? De fato, qual a justificativa pra cada invocação de método que ele fez?
Desde já galera, muito obrigado!

alexandref93
lvictor:
alexandref93:
lvictor:
Olá pessoal. Sou muito novato em JAVA e preciso resolver essa questão de prova. Me ajudem a entender isso. Sei que pra vocês deve ser fácil, mas to estudando JAVA há apenas 2 semanas. Li outros tópicos sobre sobrecarga, mas nada direcionado a isso.

PERGUNTA: Considerando a sobrecarga de métodos, para as classes abaixo, em cada uma das 5 chamadas ao método somaValores na classe Teste, identifique qual forma do método será chamada: a primeira, segunda ou terceira forma. Justifique sua resposta.

import javax.swing.*;

public class Sobrecarga {

public int somaValores (int a, int b) {
return a+b;
}
public double somaValores (double a, int b) {
return a+b;
}
public double somaValores (double a, double b) {
return a+b;
}

}

public class Teste {

public static void main(String args[]) {

Sobrecarga ob = new Sobrecarga(); 

int a = 1;
int b = 2;
int x = 3;
double c = 4;
double d = 5;

JOptionPane.showMessageDialog(null, ob.somaValores(c,a));
JOptionPane.showMessageDialog(null, ob.somaValores(d,a));
JOptionPane.showMessageDialog(null, ob.somaValores(a,b));
JOptionPane.showMessageDialog(null, ob.somaValores(c,d));
JOptionPane.showMessageDialog(null, ob.somaValores(x,a));

}
}

Olá Ivictor!!

Bem, primeiro tenha em mente de que sobrecarga de métodos, é mais que um método com mesmo nome, porém com assinatura diferente, ou com parâmetro diferente, váriaveis diferente etc... como no seu caso, tem dois métodos praticamente iguais, que retorna um double, que no caso não vai funcionar, até por que não faz sentido ter dois métodos puramente iguais... :D !!!
e tb tenha em mente que double é maior int. caso ainda não conhece direito estude sobre as variaveis primitivos.
então como na primeira chamado do método tem um valor c que é double e valor a é int, ele vai executar o método que retorna double por causa que double é maior que int, e sobrecarga de métodos sempre executar o valor maior, entendeu mais ou menos???
consegue descobrir o resto jah???

O que o rafaelps.java disse está correto? De fato, qual a justificativa pra cada invocação de método que ele fez?
Desde já galera, muito obrigado!

bem, ao que eu saiba o método invocado vai ser aquele com argumentos com valor maior!!!
pode até fazer um teste!!!

public class Teste {
static long x = 5;
static int y = 2;
public static void main(String [] args){

System.out.println(calculando(x, y));


}

public static int calculando(int a, int b){
int resultado = a * b;
return resultado;
}

public static long calculando(long a, long b){
long resultado = a + b;
return resultado;
}
}

Qual vc acha que vai ser invocado???

sendo as variaveis primitivas de numéricos são: byte, short, int, long, float e double. Obs: tah de menor pra maior!!!

L
alexandref93:
lvictor:
alexandref93:
lvictor:
Olá pessoal. Sou muito novato em JAVA e preciso resolver essa questão de prova. Me ajudem a entender isso. Sei que pra vocês deve ser fácil, mas to estudando JAVA há apenas 2 semanas. Li outros tópicos sobre sobrecarga, mas nada direcionado a isso.

PERGUNTA: Considerando a sobrecarga de métodos, para as classes abaixo, em cada uma das 5 chamadas ao método somaValores na classe Teste, identifique qual forma do método será chamada: a primeira, segunda ou terceira forma. Justifique sua resposta.

import javax.swing.*;

public class Sobrecarga {

public int somaValores (int a, int b) {
return a+b;
}
public double somaValores (double a, int b) {
return a+b;
}
public double somaValores (double a, double b) {
return a+b;
}

}

public class Teste {

public static void main(String args[]) {

Sobrecarga ob = new Sobrecarga(); 

int a = 1;
int b = 2;
int x = 3;
double c = 4;
double d = 5;

JOptionPane.showMessageDialog(null, ob.somaValores(c,a));
JOptionPane.showMessageDialog(null, ob.somaValores(d,a));
JOptionPane.showMessageDialog(null, ob.somaValores(a,b));
JOptionPane.showMessageDialog(null, ob.somaValores(c,d));
JOptionPane.showMessageDialog(null, ob.somaValores(x,a));

}
}

Olá Ivictor!!

Bem, primeiro tenha em mente de que sobrecarga de métodos, é mais que um método com mesmo nome, porém com assinatura diferente, ou com parâmetro diferente, váriaveis diferente etc... como no seu caso, tem dois métodos praticamente iguais, que retorna um double, que no caso não vai funcionar, até por que não faz sentido ter dois métodos puramente iguais... :D !!!
e tb tenha em mente que double é maior int. caso ainda não conhece direito estude sobre as variaveis primitivos.
então como na primeira chamado do método tem um valor c que é double e valor a é int, ele vai executar o método que retorna double por causa que double é maior que int, e sobrecarga de métodos sempre executar o valor maior, entendeu mais ou menos???
consegue descobrir o resto jah???

O que o rafaelps.java disse está correto? De fato, qual a justificativa pra cada invocação de método que ele fez?
Desde já galera, muito obrigado!

bem, ao que eu saiba o método invocado vai ser aquele com argumentos com valor maior!!!
pode até fazer um teste!!!

public class Teste {
static long x = 5;
static int y = 2;
public static void main(String [] args){

System.out.println(calculando(x, y));


}

public static int calculando(int a, int b){
int resultado = a * b;
return resultado;
}

public static long calculando(long a, long b){
long resultado = a + b;
return resultado;
}
}

Qual vc acha que vai ser invocado???

sendo as variaveis primitivas de numéricos são: byte, short, int, long, float e double. Obs: tah de menor pra maior!!!

Certo. Só peço que seja mais claro.
Então, por favor, responda no mesmo formato do rafael.
Como ficaria a questão então ao seu ver?
Obrigado por sua ajuda alexandre!

alexandref93

então ficaria assim:

somaValores(c,a) invoca o metodo double somaValores (double a, double b)

somaValores(d,a) invoca o metodo double somaValores (double a, double b)

somaValores(a,b) invoca o metodo int somaValores (int a, int b)

somaValores(c,d) invoca o metodo double somaValores (double a, double b)

somaValores(x,a) invoca o metodo int somaValores (int a, int b)

e se caso tiver que justificar o por que: double é maior que int, por que double é de 64bits e int de 32bits, e a variavel “c” e “d” são double, portanto ele vai executar aquele com argumento do tipo maior!!!
Conseguiu entender??? :smiley: ou piorou mais??? :smiley:

Vingdel

Olá amigo, alexandref93!

Vocês está bem enganado, os métodos são chamados de acorod com os valores passados a eles como parâmetro.

Se na chamada passa (double, inteiro), não vai chamar o método que recebe (double, double).

Reveja esse conceito de chamar o maior.

lvictor, por favor, não mande MP, não respondo essas coisas por lá.

Quanto a questão, vamos ver se consigo explicar de forma breve. Note que no seu código existem variáveis de determinados tipos que recebem valores:

int a = 1; // tipo Inteiro (int) int b = 2; // tipo Inteiro (int) int x = 3; // tipo Inteiro (int) double c = 4; // tipo double double d = 5; // tipo double
Agora repara que essa variáveis são passadas como atributos (ou argumentos) nas chamadas aos métodos:

JOptionPane.showMessageDialog(null, ob.somaValores(c,a)); JOptionPane.showMessageDialog(null, ob.somaValores(d,a)); JOptionPane.showMessageDialog(null, ob.somaValores(a,b)); JOptionPane.showMessageDialog(null, ob.somaValores(c,d)); JOptionPane.showMessageDialog(null, ob.somaValores(x,a));
Repare que no primeiro chamado de um método, são passados como argumentos a variáveis [color=red]c[/color] e [color=red]a[/color], que são respectivamente [color=darkblue]double[/color] e [color=darkblue]int[/color], como expliquei acima.

Sendo assim, está chamando o método que recebe valores desse tipo, ou seja, o segudo método:

public double somaValores (double a, int b) { return a+b; }

Quanto as variáveis que você vê nesse método, são as variaveis que vão receber os valores passados na chamada e não obrigatóriamente tem que ser variáveis do mesmo nome, mas sim do mesmo tipo (double, int).

Espero que com isso você tenha entendido e possa fazer as outras 4 chamadas corretamente.

Poste aqui o que você entendendeu e as suas resposta para dizermos se você entendeu corretamente.

Abraço!

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.

L

Vingdel:
Olá amigo, alexandref93!

Vocês está bem enganado, os métodos são chamados de acorod com os valores passados a eles como parâmetro.

Se na chamada passa (double, inteiro), não vai chamar o método que recebe (double, double).

Reveja esse conceito de chamar o maior.

lvictor, por favor, não mande MP, não respondo essas coisas por lá.

Quanto a questão, vamos ver se consigo explicar de forma breve. Note que no seu código existem variáveis de determinados tipos que recebem valores:

int a = 1; // tipo Inteiro (int) int b = 2; // tipo Inteiro (int) int x = 3; // tipo Inteiro (int) double c = 4; // tipo double double d = 5; // tipo double
Agora repara que essa variáveis são passadas como atributos (ou argumentos) nas chamadas aos métodos:

JOptionPane.showMessageDialog(null, ob.somaValores(c,a)); JOptionPane.showMessageDialog(null, ob.somaValores(d,a)); JOptionPane.showMessageDialog(null, ob.somaValores(a,b)); JOptionPane.showMessageDialog(null, ob.somaValores(c,d)); JOptionPane.showMessageDialog(null, ob.somaValores(x,a));
Repare que no primeiro chamado de um método, são passados como argumentos a variáveis [color=red]c[/color] e [color=red]a[/color], que são respectivamente [color=darkblue]double[/color] e [color=darkblue]int[/color], como expliquei acima.

Sendo assim, está chamando o método que recebe valores desse tipo, ou seja, o segudo método:

public double somaValores (double a, int b) { return a+b; }

Quanto as variáveis que você vê nesse método, são as variaveis que vão receber os valores passados na chamada e não obrigatóriamente tem que ser variáveis do mesmo nome, mas sim do mesmo tipo (double, int).

Espero que com isso você tenha entendido e possa fazer as outras 4 chamadas corretamente.

Poste aqui o que você entendendeu e as suas resposta para dizermos se você entendeu corretamente.

Abraço!

Vindgel, entendi muito bem sua explicação.
Obrigado!

alexandref93

Vingdel:
Olá amigo, alexandref93!

Vocês está bem enganado, os métodos são chamados de acorod com os valores passados a eles como parâmetro.

Se na chamada passa (double, inteiro), não vai chamar o método que recebe (double, double).

Reveja esse conceito de chamar o maior.

lvictor, por favor, não mande MP, não respondo essas coisas por lá.

Quanto a questão, vamos ver se consigo explicar de forma breve. Note que no seu código existem variáveis de determinados tipos que recebem valores:

int a = 1; // tipo Inteiro (int) int b = 2; // tipo Inteiro (int) int x = 3; // tipo Inteiro (int) double c = 4; // tipo double double d = 5; // tipo double
Agora repara que essa variáveis são passadas como atributos (ou argumentos) nas chamadas aos métodos:

JOptionPane.showMessageDialog(null, ob.somaValores(c,a)); JOptionPane.showMessageDialog(null, ob.somaValores(d,a)); JOptionPane.showMessageDialog(null, ob.somaValores(a,b)); JOptionPane.showMessageDialog(null, ob.somaValores(c,d)); JOptionPane.showMessageDialog(null, ob.somaValores(x,a));
Repare que no primeiro chamado de um método, são passados como argumentos a variáveis [color=red]c[/color] e [color=red]a[/color], que são respectivamente [color=darkblue]double[/color] e [color=darkblue]int[/color], como expliquei acima.

Sendo assim, está chamando o método que recebe valores desse tipo, ou seja, o segudo método:

public double somaValores (double a, int b) { return a+b; }

Quanto as variáveis que você vê nesse método, são as variaveis que vão receber os valores passados na chamada e não obrigatóriamente tem que ser variáveis do mesmo nome, mas sim do mesmo tipo (double, int).

Espero que com isso você tenha entendido e possa fazer as outras 4 chamadas corretamente.

Poste aqui o que você entendendeu e as suas resposta para dizermos se você entendeu corretamente.

Abraço!

Olá Vingdel, hehehe, foi mal, não vi direito que tinha o paramêtro double e int xD, vc está certo, mais se não existe esse método com parametro double e int, ele iria executar o double, passando o “c” e “a” como argumentos, neh???
Por que eu fiz uns teste aqui, e pelo menos foi assim que deu o resultado!!!

Vingdel

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.

Olá P4uloJ4va,

Se eu entendi bem, você quis dizer que em um arquivo fonte (*.java) só pode haver uma classe public, pois em um programa podem haver quantas classes public for necessário.

Na questão do lvictor jamais foi falado que deveria ser compilado em um mesmo arquivo fonte, estava apenas para visualização e estudo de caso.

lvictor, bom saber que ficou tudo entendido.

alexandref93, sim! Caso não houvesse, tanto o primeiro método quanto o segundo, em todas as chamadas seria usado o terceiro método, mas repare que o primeiro método retorna um valor int, então dependendo de como fosse, o valor retornado pelo terceiro método não seria satisfatório. Por exemplo, se a chamada fosse assim:

int resultado = somaValores(c, a);

Para dar certo, seria necessário um Cast, ficando assim:

int resultado = (int)somaValores(c, a);

Abraço e até mais!

alexandref93

Vingdel:
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.

Olá P4uloJ4va,

Se eu entendi bem, você quis dizer que em um arquivo fonte (*.java) só pode haver uma classe public, pois em um programa podem haver quantas classes public for necessário.

Na questão do lvictor jamais foi falado que deveria ser compilado em um mesmo arquivo fonte, estava apenas para visualização e estudo de caso.

lvictor, bom saber que ficou tudo entendido.

alexandref93, sim! Caso não houvesse, tanto o primeiro método quanto o segundo, em todas as chamadas seria usado o terceiro método, mas repare que o primeiro método retorna um valor int, então dependendo de como fosse, o valor retornado pelo terceiro método não seria satisfatório. Por exemplo, se a chamada fosse assim:

int resultado = somaValores(c, a);

Para dar certo, seria necessário um Cast, ficando assim:

int resultado = (int)somaValores(c, a);

Abraço e até mais!

blz!!!

discorpio

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.

Criado 27 de agosto de 2010
Ultima resposta 28 de ago. de 2010
Respostas 18
Participantes 6