Polimorfismo [DÚVIDA]

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.

Se os modificadores de acesso permitirem, sim.

5 curtidas

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"
    }

}