Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Sobre herança

Boa noite, estou com duvida na parte de se eu pegar a parte do super class, ai gero uma class filha e depois uma class neta, a neta ira herda só o código da filha?

2 respostas
solução!

Boa noite Erick, Tudo bem?

Nao, a classe neta ira herdar os metodos da classe Mae e Filha nesse caso.

Exemplo: Classe Mae

package exemplo.heranca;

public class ExemploSuper {

    private String atributoSuper;

    public String getAtributoSuper() {
        return atributoSuper;
    }

    public void setAtributoSuper(String atributoSuper) {
        this.atributoSuper = atributoSuper;
    }

    public void chamaExemploSuper() {
        System.out.println("Voce esta chamando um metodo da Classe ExemploSuper o atributoSuper dela vale: " + atributoSuper);
    }
}

Classe Filha

package exemplo.heranca;

public class ExemploFilha extends ExemploSuper {

    public void chamaExemploFilha() { 
        System.out.println("Voce esta chamando um metodo da Classe ExemploFilha o atributoSuper dela vale: " + super.getAtributoSuper());
    }
}

ClasseNeta

package exemplo.heranca;

public class ExemploNeta extends ExemploFilha {

    public void chamaExemploNeta() { 
        System.out.println("Voce esta chamando um metodo da Classe ExemploNeta o atributoSuper dela vale: " + super.getAtributoSuper());
    }
}

Classe de Teste:

package exemplo.heranca;

public class TestaHeranca {
    public static void main(String[] args) {
        ExemploSuper exemploSuper = new ExemploSuper();
        ExemploFilha exemploFilha = new ExemploFilha();
        ExemploNeta exemploNeta = new ExemploNeta();

        System.out.println("Seta os atributos das classes Super, Filha e Neta");
        exemploSuper.setAtributoSuper("Atributo da classe Super");
        exemploFilha.setAtributoSuper("Atributo da classe Filha");
        //Note que aqui estamos chamando um metodo da classe super atraves da Neta.
        exemploNeta.setAtributoSuper("Atributo da classe Neta");

        System.out.println("Chamada da classe Super");
        exemploSuper.chamaExemploSuper();
        System.out.println("Chamadas da classe Filha");
        exemploFilha.chamaExemploFilha();
        exemploFilha.chamaExemploSuper();
        System.out.println("Chamadas da classe Neta");
        exemploNeta.chamaExemploNeta();
        exemploNeta.chamaExemploFilha();
        exemploNeta.chamaExemploSuper();

    }
}

Voce devera ver o resultado a seguir:

Seta os atributos das classes Super, Filha e Neta
Chamada da classe Super
Voce esta chamando um metodo da Classe ExemploSuper o atributoSuper dela vale: Atributo da classe Super
Chamadas da classe Filha
Voce esta chamando um metodo da Classe ExemploFilha o atributoSuper dela vale: Atributo da classe Filha
Voce esta chamando um metodo da Classe ExemploSuper o atributoSuper dela vale: Atributo da classe Filha
Chamadas da classe Neta
Voce esta chamando um metodo da Classe ExemploNeta o atributoSuper dela vale: Atributo da classe Neta
Voce esta chamando um metodo da Classe ExemploFilha o atributoSuper dela vale: Atributo da classe Neta
Voce esta chamando um metodo da Classe ExemploSuper o atributoSuper dela vale: Atributo da classe Neta

Ou seja, voce consegue acessar os metodos (e atributos, caso sejam protected ou public) atraves das classes mais especificas.

Se tiver alguma dificuldade para rodar o codigo acima, me avisa que commito no GitHub. Abs

Aaaa entendi obrigado Matheus