Ou seja, Apple não pertence a nenhum pacote. E Mercado pertence ao pacote food. Eu não consigo instanciar nem extender Apple através de classes que não estejam no pacote default também. Mas Apple acessa as classes públicas dos outros pacotes. Por que isso ocorre???
Voce consegue acessar porque a classe é pública sendo assim, ela tem visibilidade pra todas as classes e packages da mesma…
Lembre-se que o acesso default as classes é package e não public como muitos pensam…
LPJava
isso qdo estar se aprendendo as vezes eh meio confuso mais vamos a pequena explicacão.
modificador default refere-se a nivel de acesso ao pacote… qdo vc tem uma class como default ela pertence aquele pacote e mais a ninguem se vc quiser criar uma instancia dessa classe, a outra classe que for criar deve estar nesse mesmo pacote. exemplo:
packagecap1;classDefau{staticintx=10;}/*class que pertence ao pacote*/packagecap1.Carros;importcap1.Defau;publicclassFauextendsDefau{publicstaticvoidmain(String[]args){System.out.println(x);}}/* observe que ele nem importa a minha class que eh somente do pacote dela*/
e o modificador public ele diz estou disponivel, visivel para todos mesmo em pacotes de diferentes ja que é publico… assim veja publico como a PM, hehe ela presta um serviço publico, deve proteger cada cidadão sem restritões… agora o default veja o seguinte… vc tem um segurança particular na sua casa e diz pra ele… olhe tudo que estiver dentro da minha casa vc deve fazer a segurança… blz? entao esse segurança so é visivel dentro da package casa. agora vamos dizer que vc pegou o radio do vizinho emprestado… ele vai ser visivel para o segurança ja que está na sua casa… hehe
flW… espero ter ajudado um exemplo com public e default:
packagecap1;publicclassDefau{staticintx=10;}/*minha class eh public disponivel para todos, porem o membro so pode ser visto nesse pacote*/packagecap1.Carros;importcap1.Defau;publicclassFauextendsDefau{publicstaticvoidmain(String[]args){System.out.println(x);}}/*a class eh importada pq ela eh public porem o membro nao posso acessa-lo de um pacote diferente, somente aonde ele foi declarado isso nao compila*/Exceptioninthread"main"java.lang.Error:Unresolvedcompilationproblem:ThefieldDefau.xisnotvisible
P
paulogabriel13
muito obrigado pela resposta de voces! os modificadores das classes eu compreendi.
mas minha duvida principal continua. Porque eu nao posso acessar classes (publicas ou nao) de Pacotes Default (sem nome)? Seria porque a JVM nao consegue distinguir qual classe eu estou me referindo???
nadilsons
Pelo o que entendi a dúvida do Paulo nao é sobre a visiblidade de classes… e sim sobre a não possiblidade de se referenciar a uma classe sem pacote (pacote default, por definição) em classes que estao dispostas em algum pacote.
Bem, pelo que sei realmente nao é possivel referenciar classes que estao no pacote default em classes alocadas em outros pacotes, nao importando o modificador de acesso da classe do pacote default
P
paulogabriel13
justamente nadilsons…essa eh a minha duvida! agora eu queria saber o porque disso! :?