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
Não pode acessar pq não está no mesmo pacote.
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?
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
[code]
- 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{} [/code]
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.
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
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.