Protected+interface

6 respostas
Diabo_Loiro

ola estava estudando interfaces e vi sobre um erro comun em usar o metodo clone tem esse exemplo mais simples

packge animals; class mamifero{protected int meuint;} package animal; class gato extends mamifero{} class cao extends mamifero{ gato g=new gato(); int intDoGato=g.meuint;//nao da o campo esta protegido } class dalmata extend dog{}

ele so funciona se eu se eu intanciase um cao ou um dalmata
diz que isso serve para força o menbro da intancia protegida so ser acessado por parte da hierarqui a qual pertence e nao a imãos

oque nao entendo eh essa parte do codigo

class cao extends mamifero{ gato g=new gato(); int intDoGato=g.meuint;//nao da o campo esta protegido }
pq a intancia de g n pode pegar o meu int sendo que ela tbm eh filha por consequecia possui o campo myint

vlw pessoal se pudesse exclaresse melhor

6 Respostas

cezarborges

Não pode acessar pq não está no mesmo pacote.

ignacio83

Somente as classes que herdam (ou do mesmo pacote) de Mamifero podem acessar os métodos protegidos…

Através de uma classe de outro pacote que não herde de Marmifero, mesmo estanciando gato… vc não terá acesso.

Se acesso que vc quer é public e não protected. Se não, não haveria diferença entre public e protected concorda?

Diabo_Loiro

mais a classe cao herda de mamifero tambem e um gato deveria tem uma variavel myint pq herda de mamifero tambem

isso que complica eu entendi a regra é que eu so poderia usar um gato.clone numa classe gato ou em uma sub classe mais o porque de eu ser obrigado a isso... pq n posso usar uma intancia gato que extende mamifero numa classe cao que tambem extende mamifero.

vejao que as 2 exetenden mamifero e estao no mesmo pacote
1. packge animals;  
   2. class mamifero{protected int meuint;}  
   3. package animal;  
   4. class gato extends mamifero{}  
   5. class cao extends mamifero{  
   6. gato g=new gato();  
   7. int intDoGato=g.meuint;//nao da o campo esta protegido  
   8. }  
   9. class dalmata extend dog{}
ignacio83

Esse código seu compila? Ele parece bem confuso pra mim…

Mais vms lá:

Tem dois pacotes ai: animals e animal. mamifero está em animals e gato está em animal.

Diabo_Loiro

testa ele ele da erro naquela linha

sao 2 pacotes…

1classe mae

2filnhas
gato e cao

so que na clase cao eu nao consigo fazer um gato acessar a variavel protected pois esta fora do pacote… e por nao ser sub classe de cao…

pq gato eh irma de cao
so que queria uma explicaçao util para isso

cezarborges

Você está equivocado, pois os pacotes devem conter as classes relacionadas e com isso você criou uma confusão.

Altere o package Animals para SerVivo por exemplo, perceberá então com clareza sua confusão, pois em ser vivo eu poderia ter plantas e animais também. Caso a propriedade #meuInt seja apenas para ser visualizada nesse pacote (SerVivo) somente neste caso você define como protected, não é por acaso, é porque a estrutura do seu projeto requer isso. Agora, se você quer acessar essa propriedade através de outros pacotes (Por exemplo Animal) aí então você deverá definí-la como public.

Isto tudo é definido como falei, não ao acaso, mas porque antes de desenvolver o seu projeto você deve fazer uma análise de requisitos e identificar as propriedades e metodos que serão public, protected, private, frendly…

Isso é o mesmo que definir uma propriedade como String e tentar efutuar um cálculo sem convertê-la, é um erro de lógica e construção.

Criado 16 de abril de 2009
Ultima resposta 17 de abr. de 2009
Respostas 6
Participantes 3