Com relação às duas classes anteriores pode-se dizer que:
01 class Prova{
02 public int a;
03
04 Prova(int _a){
05 a = _a;
06 }
07 public void acrescenta(int n){
08 a += n;
09 }
10 public void acrescenta(){
11 a++;
12 }
13 }
14 class SubProva extends Prova{
15 private int b;
16 SubProva(int umb, int uma){
17 super(uma);
18 b = umb;
19 }
20 public void acrescenta(int n){
21 b=b+n+2;
22 }
23 public static void main (String args[ ]) {
24 SubProva s = new SubProva(2,5);
25 Prova p = new Prova(2);
26 s.acrescenta(3);
27 p.acrescenta();
28 System.out.println(s.b+s.a);
29 System.out.println(p.a);
30 s.acrescenta();
31 System.out.println(" "+s.b+p.a+s.a) ;
32 }
33 }
Gabarito comentado
Confira o gabarito comentado por um dos nossos professores
Alternativa correta: D - existe sobrecarga no método acrescenta;
No contexto da programação, especialmente em linguagens orientadas a objeto como Java, sobrecarga (ou overloading em inglês) é um conceito pelo qual dois ou mais métodos em uma mesma classe podem ter o mesmo nome, desde que suas listas de parâmetros sejam diferentes em número, tipo ou sequência de tipos de parâmetros. Isso permite que o mesmo método tenha comportamentos diferentes, dependendo dos argumentos passados na chamada.
Analisando o código fornecido, vemos que na classe Prova são definidos dois métodos com o nome acrescenta. O primeiro método acrescenta(int n)
(linhas 07-09) espera um parâmetro inteiro, enquanto o segundo método acrescenta()
(linhas 10-12) não espera nenhum parâmetro e simplesmente incrementa a variável a
em uma unidade. A presença desses dois métodos distintos na mesma classe, mas com diferentes listas de parâmetros, é um exemplo clássico de sobrecarga.
As demais alternativas podem ser refutadas da seguinte maneira:
- Alternativa A: O método
main
aparece apenas uma vez e, portanto, não pode estar sobrecarregado. - Alternativa B: A classe SubProva tem apenas um construtor e, por isso, não há sobrecarga de construtores nela.
- Alternativa C: A classe Prova tem apenas um construtor e, novamente, não há sobrecarga de construtores nela.
- Alternativa E: Como já explicado, a sobrecarga ocorre com o método
acrescenta
na classe Prova.
Portanto, a única justificativa verdadeira é a que se refere à sobrecarga do método acrescenta
, o que corresponde à alternativa D.
Clique para visualizar este gabarito
Visualize o gabarito desta questão clicando no botão abaixo
Comentários
Veja os comentários dos nossos alunos
Primeiramente temos que saber o que é sobrecarga de métodos
Sobrecarga de método permite a existência de vários métodos de mesmo nome, porém com assinaturas levemente diferentes ou seja variando no número, tipo de argumentos , no valor de retorno e até variáveis diferentes. Ficará a cargo do compilador escolher de acordo com as listas de argumentos os procedimentos ou métodos a serem executados.
a) ERRADO. Não existe sobrecarga no método main;
b) ERRADO. Não existe sobrecarga no método SubProva;
c) ERRADO. Não existe sobrecarga no método Prova;
d) CORRETO. Existe sobrecarga no método acrescenta; São três métodos com o mesmo nome, são eles: public void acrescenta(int n), a += n; public void acrescenta(), a++; public void acrescenta(), b=b+n+2;
e) ERRADO. Existe sobrecarga no método acrescenta;
Clique para visualizar este comentário
Visualize os comentários desta questão clicando no botão abaixo