Bom dia Glauco, tudo bom?
Ambas as justificativas são verdadeiras, tanto a sua quanto a do instrutor. O problema que o instrutor quis lidar é o seguinte:
A classe B
está no pacote a.b
. Nas classes A
e C
, o código tenta acessar a classe B
do digitando somente parte do pacote (b.B
), quando deveria incluir o caminho completo (a.b.B
).
Importar o conteúdo do pacote a
(import a.b;
) também não funcionaria, pelo mesmo motivo: você precisa acessar a classe diretamente (import a.b.B;
e então B variavel;
) OU utilizar o pacote completo desde a raiz (a.b.B variavel;
).
Como você disse, nada disso funciona se a classe B
não for pública. Porém só dá erro o de compilação de classe pública a seguir CASO o problema anterior seja resolvido.
error: B is not public in a.b; cannot be accessed from outside package
Dê uma olhada na compilação a seguir:
## sem pacote nenhum
>> javac a/A.java
./a/A.java:5: error: cannot find symbol
B attr;
^
symbol: class B
location: class A
1 error
## com pacote parcial
>> javac a/A.java
./a/A.java:5: error: package b does not exist
b.B attr;
^
1 error
## com pacote completo
>> javac a/A.java
./a/A.java:5: error: B is not public in a.b; cannot be accessed from outside package
a.b.B attr;
^
1 error
Reparou que o compilador trava antes de chegar a conferir se a classe é pública? Isso ocorre pois ele não consegue nem identificar onde está a classe B, pios existe um erro de pacote.
Deu pra entender? Espero que sim!
Qualquer dúvida, não hesite em perguntar!
Bom dia e bons estudos!