Duvida com Herança

Olá ,

uma duvida de conceito para entender herança…pois minha dificuldade
e visualizar qdo usar os metodos do pai ou do filho…

Não sei se estou falando besteira foi o seguinte :

  • qdo a classe super tem um metodo

  • e a classe sub herdade essa classe com metodo
    Minha conclusão :

  • qdo usamos :
    Animal h = new Animal();
    h.eat();
    Resposta : imprime o metodo do pai

    Animal h = new Horse();
    h.eat();
    Resposta : imprime o metodo do filho

    Até aqui tudo bem o que estava em duvida era o seguinte quando poderia chamar o metodo dos filhos dessa forma:

    Animal h = new Horse();
    h.printYour(); //erro
    h.buck(); /erro

    O que conclui e não sei se está correto :
    a)- quando uso Animal h = new Horse() visualizo os metodos em comum nas duas classes mas é executado de quem é o construtor Horse().

    b)- quando uso Horse h = new Horse() visualizo todos metodos dessa classe e não da super-classe :
    h.buck();
    h.eat();
    h.printYour();
    e ao executar h.eat() vai executar da classe sub

    c)- quando uso Animal a = new Horse() não consigo visualizar os metodos h.buck(),h.printYour() pois esses metodos são da classe sub e não existe esses metodos em Animal.

Para entender a herença acima estou pensando na conclusão a,b,c.
Gostaria de saber se meu pensamento está correto ou está errado?

Se alguém quiser dar ajuda no entendimento se é esse o caminho pra o entendimento ou se estou errado …fico no aguardo de uma ajuda

abs


--classe super
public class Animal {
   public void eat(){
	   System.out.println("Animal");
   }
}

--sub classe
public class Horse extends Animal {
	public void printYour(){
		 System.out.println("Horse...printYour()");
		}
		public void buck(){
			System.out.println("Horse...buck()");	
		}
		
		public void eat(){
			System.out.println("Horse...eat()");	
		}
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
      		
		Animal h = new Animal();
		h.eat();
	}

}

Está OK.

Obrigado…valeu pelo retorno…tks

Não. Vc visualiza (tem acesso) aos métodos definidos apenas em Animal. Ou seja, os comuns. Não tem acesso aos métodos definidos em Horse. Contudo, quando executa um método da interface comum, ele pode estar sendo executado em Horse se tiver sido sobre-escrito por essa classe.

Não. Assim vc visualiza (tem acesso) a ambos. Tanto os que são particulares de Horse quanto os que são adquiridos de Animal.

Sim. Por isso a sua versão (a) estava errada.

Herança é uma forma de ganhar coisas. Os filhos têm tudo o que os pais têm e permitiram que fosse herdado ( sim, o pai pode deserdar o filho :stuck_out_tongue: ). Os filhos podem obter coisas do pai e simplesmente mudá-las. Eles não podem destrui-las/escondê-las, mas podem mudá-las ( sobre-escrita)