Estou revisando alguns conceitos para minha prova de certificação, porém me deparei com um problema no mínimo curioso pelo menos para mim…
Até onde sei, membros “protected” acessados de fora da propria classe ou fora de uma subclasse, são “invisiveis”, porém aqui em casa compilou normalmente chegando a exibir os valores protegidos, algum erro meu? não estou conseguindo enxergar o erro. Segue abaixo os arquivos.
Arquivo 1
publicclassTeste1{protectedintx;protectedvoidmetodoTeste1(){System.out.println("Metodo Teste 1");};}
cara é o seguinte… o protected vc considera pacote + filho(subclasse)
qualquer classe dentro do mesmo pacote tem acesso, e também tem acesso de outro pacote caso a classe seja uma subclasse…
no seu exemplo não tem declaração de pacote, ou seja, supõe-se que estão no mesmo pacote e tudo tem que rodar perfeito…
agora se vc colocar na classe Teste1 um: package testeUm; e na classe Teste um package testeDois; ai sim eles não seriam visíveis…
entendeu…
flw Hewerton
A
Amanweb
Membros protected são visíveis se estiverem em classes no mesmo pacote.
S
SlashJava
Amigo,
O nivel de acesso protected pode ser acessado por classes q estão no mesmo pacote, esse e o seu caso.
As 2 classes estão no mesmo pacote por isso vc conseguiu esse valor, se o Arquivo2 estivesse em outro pacote vc nao conseguitia acessar os membro do arquivo1 a menos q o arquivo2 fosse um subclasse do arquivo1.
Protected = pacote+subsclasse.
Espero ter ajudado.
Valeu.
J
javapaulomg
Opa se ajudou galera… valeu… e isso mesmo acabei esquecendo deste detalhe sobre o protected, foi o vicio com comportamento do modificador protected do delphi… valeu novamente a todos…
J
Javabuntu
e fora também :!: esqueceu das subclasses :?:
O
oculos
e ae pessoal, só pra complementar …
se uma subclasse for chamar um atributo protected da superclasse,
terá que chamar com super.x = 10
se não me engano…
mas é isso ai…
valeu!!
J
Javabuntu
oculos:
e ae pessoal, só pra complementar …
se uma subclasse for chamar um atributo protected da superclasse,
terá que chamar com super.x = 10
se não me engano…
mas é isso ai…
valeu!!
8)
estais confundindo sim!
uma subclasse só tem acesso a uma variável protected através da herança, vc não consegue acessá-la usando o .(ponto)
a classe filha herda o atributo e pronto, ela não tem acesso indo buscar na classe mãe…
R
rmala_ti
Javabuntu:
oculos:
e ae pessoal, só pra complementar …
se uma subclasse for chamar um atributo protected da superclasse,
terá que chamar com super.x = 10
se não me engano…
mas é isso ai…
valeu!!
8)
estais confundindo sim!
uma subclasse só tem acesso a uma variável protected através da herança, vc não consegue acessá-la usando o .(ponto)
a classe filha herda o atributo e pronto, ela não tem acesso indo buscar na classe mãe…
Concordo que não precise utilizar o ponto para acessar um método protect herdado da superclasse.
B
brunoha
Ae galera, sou novo no GUJ, e entrei com o objetivo de me especializar em Java, que é a minha paixão.
Só para esclarecer, e para ver se estou certo: na classe Teste1, se o atributo e o métodos fossem declarados como private, aí nem classes especializadas, nem classes do mesmo pacote conseguiriam acessar, certo???
L
LPJava
brunoha:
Ae galera, sou novo no GUJ, e entrei com o objetivo de me especializar em Java, que é a minha paixão.
Só para esclarecer, e para ver se estou certo: na classe Teste1, se o atributo e o métodos fossem declarados como private, aí nem classes especializadas, nem classes do mesmo pacote conseguiriam acessar, certo???
Sim private é visto apenas naquela classe… um exemplo que costumo usar é que private é como as roupas intimas… por exemplo: “Vc herdou a cueca do seu pai? Está usando ela?” rs
Concordo que não precise utilizar o ponto para acessar um método protect herdado da superclasse.
só tem um detalhe no seu comentário, no “não precise”, na verdade NÃO PODE, a subclasse em outro pacote SOMENTE tem acesso ao atributo protected pela herança, ou seja, apenas o que ela herdou, ela não tem nenhum conhecimento sobre o atributo que está na classe pai, se vc usar o operador ponto pra tentar acessar através de uma instância, o compilador vai simplesmente dizer, "que variável é essa que está tentando acessar :?: não conheço nenhum :!: " erro de compilador ok…
flw Hewerton
R
rmala_ti
Javabuntu:
rmalati:
Concordo que não precise utilizar o ponto para acessar um método protect herdado da superclasse.
só tem um detalhe no seu comentário, no “não precise”, na verdade NÃO PODE, a subclasse em outro pacote SOMENTE tem acesso ao atributo protected pela herança, ou seja, apenas o que ela herdou, ela não tem nenhum conhecimento sobre o atributo que está na classe pai, se vc usar o operador ponto pra tentar acessar através de uma instância, o compilador vai simplesmente dizer, "que variável é essa que está tentando acessar :?: não conheço nenhum :!: " erro de compilador ok…