Estou estudando polimorfismo e acabei criando um problema que nao sei se isso pode ocorrer no mundo real mas o problema é o seguinte.
Tenho um método na classe pai que foi feito uma sobrecarga na classe filha, no entanto gostaria que o método da pai atribui-se o valor ao atributo da filha.
Exemplo:
public class Animal {
protected double peso;
public Animal(double peso) {
this.peso = peso;
}
void comer(String comida) {
System.out.println("Comer: " + comida );
//Aqui devo alimentar a classe filha Cachorro
this.peso++;
}
}
public class Cachorro extends Animal{
private double peso;
public Cachorro(double peso) {
super(peso);
this.peso = peso;
}
void comer(String pComida1, String pComida2) {
System.out.println("Cachorro Come: " + pComida1 + " + " + pComida2 );
this.peso++;
}
void engordou() {
System.out.println("Peso inícial: " + super.getPeso() + " kg");
System.out.println("Peso atual: " + this.getPeso() + " kg");
System.out.println("Engordou: " + (this.peso - super.peso + " kg"));
}
}
public class SuperClasseTeste {
public static void main(String[] args) {
Cachorro toto = new Cachorro(5);
toto.comer("Pão","Osso");
toto.comer("Filé");
toto.engordou();
}
}
Por que você precisa de atributos peso nas duas classes? O peso na classe pai (Animal) já não é suficiente?
Abraço.
É uma situação hipotipótica, o caso é se a uma solução para isso e qual a possibilidade disso ocorrer em um senário real (Estou quebrando algum fundamento) alem do bom senso kkk. agradeço pela atenção.
hipotipótica
Taí uma palavra interessante. Mas acho que você quis dizer hipotética. Hipotipose é outra coisa 
Conceitualmente, eu não vejo muito sentido você ter dois atributos iguais em duas classes quando uma estende a outra. Pode haver um cenário em que isso seja real, mas deve ser algo bem específico. No geral, acho que gera mais confusão do que ajuda na resolução do problema.
Se o que você quer é armazenar o peso inicial do Animal antes de comer, faz mais sentido ser direto e criar um atributo pesoInicial, por exemplo, ao invés de ficar tentando reaproveitar o atributo peso.
A variável afetada em comer é a mais próxima do método. Para obter o que você quer (alterar o atributo do cachorro sem mexer no atributo pai), você teria que garantir que o método comer chamado é o da classe filha (com dois parâmetros).
Além disso, note que seu código não faz bom uso do polimorfismo, pois o Cachorro especializa a classe Animal de uma forma que Animal não pode ser usado para representar completamente um Cachorro, pois Cachorro possui um método que não existe em Animal. Se você tentar fazer:
Animal toto = new Cachorro(5);
toto.comer("Pão","Osso");
Seu código não vai compilar, pois não há comer com 2 parâmetros em Animal. Dessa forma, uma variável do tipo Animal não pode ser usada para representar um Cachorro.
Abraço.
1 curtida
Se sua classe base precisa acessar atributos da classe derivada, então suas classes estão mal projetadas.
hipotipótica que palavra feia kkk, usei o corretor e não me atentei ao palavrão que escrevi mas que bom que você entendeu 
Bom @TerraSkilll agradeço pela resposta, passei o dia brincando fazendo exercícios e pesquisando sobre boas praticas utilizando Interface, isso se juntou com herança, classes abstratas e polimorfismo me ajudando a enxergar melhor sua resposta ao problema que criei
mas tenho muito que aprender e praticar.
Abraço.