Olá pessoal estou estudando pra certificação e estou em duvida na resposta da pergunta abaixo :
Por que o item A para zero já que existe quatro declaração essa é minha duvida ?
Já que a resposta é a letra C …não entendi …?
Se alguem puder me ajudar agradeceria …abs
Código:
Section 1: Declarations, Initialization and Scoping > Objective 1.2 > Question 3
Given:
1. abstract class Color {
2. protected abstract String getRGB();
3. }
4.
5. public class Blue extends Color {
6. // insert code here
7. }
And four declarations:
public String getRGB() { return "blue"; }
String getRGB() { return "blue"; }
private String getRGB() { return "blue"; }
protected String getRGB() { return "blue"; }
How many, inserted independently at line 6, will compile?
A) 0
B) 1
C) 2
D) 3
E) 4
Pelo que entendi, a resposta correta mesma é o item C.
O fato do item A ser 0, quer dizer que nenhuma declaração irá compilar.
A pergunta diz assim: Indenpendente das 4 declarações acima, quantas
declarações irá compilar:
O correto irá compilar com a primeira e segunda declaração!
porque na classe abstrata Color foi definido o método getRGB como
protegido, então este método que deve ser obrigado declarar na
classe filha deve ser protegida ou pública.
[quote]oculos:
deve ser obrigado declarar na
classe filha deve ser protegida ou pública
[/quote]
isso acontece porque, ao sobrescrever um métodos, sua definição deve dar igual ou mais permissão para o mesmo… ou seja, se você vai sobrescrever um método private, ele pode ser qualquer coisa (já que ele é o com menos permissão de acesso), já um public, só pode ser public (maior permissão de acesso).
Nada como usar o compilador para conferir. A resposta é C mesmo - como se sabe, ao sobrepor um método, você pode torná-lo mais público, não mais privado.
A ordem de privacidade é:
private > [default] > protected > public
ou seja, protected abstract String getRGB só pode ser sobreposta por um método "protected" ou "public".
abstract class Color {
protected abstract String getRGB();
}
public class Blue extends Color {
public String getRGB() { return "blue"; } // OK
String getRGB() { return "blue"; } // attempting to assign weaker access privileges; was protected
private String getRGB() { return "blue"; } // attempting to assign weaker access privileges; was protected
protected String getRGB() { return "blue"; } // OK
}