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 ?
public class polimorfismo {
int abc = 10;
}
class A {
polimorfismo teste1 = new polimorfismo();
}
class B {
A teste2 = new 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
|
+--+--+
| |
A B
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.
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 61 99586-4554 ai eu mando em áudio que eu acho que não to sabendo formula bem a pergunta não. Agradeço !
public class Pai { //Nomes de classes iniciam com letra maiúscula em Java
public int num = 10; //modificador público para permitir o acesso
}
public class FilhaA extends Pai { //Se é Filha, então deve estender
public Pai pai = new Pai(); //FilhaA agora tem uma referência a uma NOVA INSTÂNCIA da sua Superclasse (mas porque você quer fazer isso?)
}
public class FilhaB extends Pai {
FilhaA filhaA = new FilhaA(); //FilhaB agora tem uma instância de FilhaA
public void metodoDaFilhaB() {
Pai paiQueEstaDentroDaFilhaA = filhaA().pai; //Obtenho acesso ao "Pai" que está dentro da FilhaA
int numDentroDoPai = 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:
public class Pai {
public int num = 10; //modificador público para permitir o acesso
}
public class FilhaA extends Pai {
int numDaFilhaA = num; //estou pegando o valor "10" do Pai e passando para "numDaFilhaA"
}
public class FilhaB extends Pai {
public void metodoDaFilhaB() {
num += 5; //Estou incrementando em 5 o "num" do Pai
System.out.print(num); //imprime "15"
}
}