Seguinte galera, estou fazendo simulados do whizlabs para certificação SCJP, e estou com dúvida em relação a este exercicio.
package whizlabs.diagnostic_exam.fundamentals.x;
public class SuperClassX {
protected void superclassMethodX() { }
int superclassVarX;
}
01 package whizlabs.diagnostic_exam.fundamentals.x.y;
02 import whizlabs.diagnostic_exam.fundamentals.x.*;
03 public class SubclassY extends SuperClassX {
04 SuperClassX objX = new SubclassY();
05 SubclassY objY = new SubclassY();
06
08 void subclassMethod() {
09 objY.subclassMethod();
10 int i;
11 i = objY.superclassVarX;
12 }
13 }
Respostas:
a - Compilation error at line 5
b - Compilation error at line 9
c - Compilation error at line 11
d - None of these
Eu marquei a “c” , mas quando fui ver o resultado, a “d” era a correta.
Explanação desta questão:
When no access modifer is specified for a member, the latter is only accessible by other classes defined
in the same package. Even if its class is visible in another package, the member is not accessible
there. In the question above, the variable supeclassVarX has no acess modifer specified and hence it
cannot be accessed in the packageY even though the SuperclassX class is visible and the protected
method superclassMethod() is accessible. Thus the compiler will raise an error at line 11.
Agora fica a seguinte dúvida, estou eu errado ou o whizlabs.
Parece bug.
E depois ele fala que a resposta é outra? Tá doidão!
E não foi só esta questão que eu percebi alguma coisa de errado, tem outras também.
LPJava
Fevereiro 1, 2007, 10:52am
#4
agora responde ai pq letra c ? na minha analisada no codigo, realmente a letra D está correta nao há problemas em nenhuma das linhas citada observe q ele importa *;
se eu tiver errado alguem me corrige…
Camilo…
Td bem que ele importa o pacote certo. Porém ele está acessando a propriedade superclassVarX de uma instância de SubclassY (objY). Só que a propriedade “int superclassVarX” na classe SuperClassX que deveria ser herdada (para poder ser acessada), não será, porque o modificador de acesso default só dá acesso para classes do mesmo pacote!
Entendeu?
As Classes estão em pacotes diferentes… A classe SuperClassX possui este campo:
Que não tem acesso em outro pacote, pois usa o modificador é padrão.
Acho que ai esta o erro, caso eu esteja errado, por favor me corrigem.
Heider, você está certo! É isso mesmo! O compilador vai chiar falando que a propriedade não existe!
LPJava
Fevereiro 1, 2007, 12:01pm
#8
eita que confusao whilabs errado?