Explicação Questão 23 - TCE-SP

Considere as classes JAVA a seguir para responder à próxima questão:


1 package a;

2 public class Pai {

3     protected String nome = “joão”;

4 }

5 package b;

6 import a.Pai;

7 public class Filho extends Pai{

8     public void questaoJava(){

9        System.out.println(nome);

10       Pai pai = new Pai();

11       pai.nome = “josé”

12       System.out.println(pai.nome);

13   }

14 }


O que ocorrerá se executarmos o método questaoJava()?


a) Será impresso “joão joão”

b) Será impresso “joão josé”

c) Ocorrerá um erro de compilação na linha 11

d) Ocorrerá um erro de execução na linha 11

e) Será impresso “josé josé”


Comentário:

Letra C. O código apresentado resulta em um erro de compilação na linha 11. O atributo nome está declarado na classe Pai com o modificador de acesso “protected”. Logo, ele estará visível na classe Filho. Sendo assim, a linha 9 compila sem problemas, pois estamos acessando o atributo nome da própria classe Filho, que foi herdado. Já na linha 11, tentamos acessar o atributo nome diretamente da classe Pai, e esta tentativa de acesso não é possível.