Para melhor entendimento usaremos o esquema da primeira imagem para criarmos um programinha simples que irá receber os dados de pessoas digitados pelo usuário.
Temos abaixo código do programa que receberá os dados digitados pelo usuário. Os comandos que ainda não foram explicados serão explicados antes da criação do código de cada classe. Gostaria de ressaltar que o foco aqui é a demonstração da herança. Por essa razão os comandos aqui são explicados apenas para facilitar o entendimento de como o código funciona.
Aqui a classe pai é criada com seus atributos e métodos construtores. O primeiro método já define o valor dos atributos enquanto o segundo método recebe os valores por parâmetro.
Aqui é criada a classe PF, que é filha da classe Pessoa. Por essa razão é utilizada a cláusula extends na criação da classe (para mostrar que a classe PF herda atributos da classe Pessoa). Da mesma forma que na classe Pessoa, na PF foram criados os métodos construtores. A diferença é que dessa vez utilizamos o comando super(), que serve para chamar o construtor da classe pai. É importante notar que o método construtor usado para passagem de parâmetros não tem apenas os seus atributos que já foram definidos na criação, mas também tem os atributos da classe Pessoa: public PF (String nome, String telefone, String endereco, String RG, String CPF) Na verdade tanto faz o nome que será usado. Para evitar confusões usei nomes iguais aos dos atributos:nome, telefone e endereco. Poderia também usar n, t e e que, da mesma forma, os valores seriam passados, já que o super() funciona de forma a enviar os parâmetros na ordem em que se encontram. No comando super() foram definidos os atributos que serão enviados para a classe pai. É justamente aqui que o super() faz a diferença, na passagem por parâmetros.