Duvida na resposta

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.

Acho que ajudei… :smiley:

qualquer coisa posta ai…

falows!!!

ops, estou corrigindo a seguinte linha:

O correto irá compilar com a primeira e segunda declaração!

o certo é:

O correto irá compilar com a primeira e quarta declaração!

até…

[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
}