Então, eu gostaria de saber o seguinte: Se eu criar uma classe PAI e criar duas subclasses dessa classe, A E B, e instanciar a classe PAI na classe A e a classe A na classe B, eu consigo acessar de forma direta através da instância da classe B os membros da classe PAI, pois tenho a instância da classe PAI na classe A e a instância da classe A na classe B, existe a possibilidade da minha instância na classe B referenciar a instância na classe A ?
Quando você tem uma classe Pai e cria duas classe A e B que estendem essa classe, você está dizendo que a classe A é uma classe Pai e a classe B também é uma classe Pai, logo ambas conhecem os membros de sua superclasse, respeitando os modificadores de acesso é claro.
Pai|+--+--+||AB
Agora presta bem atenção na sua pergunta, pois talvez você está meio confuso e não perguntou com clareza.
Por qual motivo você instanciaria a superclasse dentro das classes filhas?
Me parece um erro arquitetural.
Se A e B são subclasses de Pai, você já está enxergando os membros de Pai.
Se os modificadores de acesso permitirem, sim.
Rogerio_Cruzz
Não mano, esses conceitos ai eu ja sei, minha duvida é um pouco complicada de transforma em uma pergunta… Mas vamos lá
Pai|+--+--+|A//Possui uma instancia de PAI+|+|B//Possui uma instancia de A
Ta vendo o esquema acima ? então, eu sei que se eu quiser usar método da classe PAI eu posso criar uma instancia de PAI na minha classe B, mas minha duvida é a seguinte, eu consigo acessar a instancia de PAI que existe em A (assim conseguindo acessar os métodos de PAI) através da minha instancia de A que existe em B, entendeu ? Me chama no whats se preferir [telefone removido] ai eu mando em áudio que eu acho que não to sabendo formula bem a pergunta não. Agradeço !
D
Douglas-Silva
publicclassPai{//Nomes de classes iniciam com letra maiúscula em Javapublicintnum=10;//modificador público para permitir o acesso}publicclassFilhaAextendsPai{//Se é Filha, então deve estenderpublicPaipai=newPai();//FilhaA agora tem uma referência a uma NOVA INSTÂNCIA da sua Superclasse (mas porque você quer fazer isso?)}publicclassFilhaBextendsPai{FilhaAfilhaA=newFilhaA();//FilhaB agora tem uma instância de FilhaApublicvoidmetodoDaFilhaB(){PaipaiQueEstaDentroDaFilhaA=filhaA().pai;//Obtenho acesso ao "Pai" que está dentro da FilhaAintnumDentroDoPai=paiQueEstaDentroDaFilhaA.num;//Obtenho acesso ao campo "num" que está dentro do Pai}}
O código acima deve compilar, embora não tenha testado. Mas, note que, no código acima não estou usando o polimorfismo, apenas composição.
Mas porque você quer fazer isso? Você sabe que, você pode ter acesso direto - por meio da herança - ao que o “Pai” tem? Veja:
publicclassPai{publicintnum=10;//modificador público para permitir o acesso}publicclassFilhaAextendsPai{intnumDaFilhaA=num;//estou pegando o valor "10" do Pai e passando para "numDaFilhaA"}publicclassFilhaBextendsPai{publicvoidmetodoDaFilhaB(){num+=5;//Estou incrementando em 5 o "num" do PaiSystem.out.print(num);//imprime "15"}}