Herança

Herança

O objetivo da herança no Java é agrupar atributos comuns de varias classes em uma única classe denominada Super-Classe, e as características especificas ficam na Sub-Classe. No Java o comando que representa a herança é chamado extends. E uma Sub-Classe não pode ter mais de uma Super-Classe.

super() x super

O comando Java super() , “super com parêntese” , no construtor da sub-Classe tem a finalidade de chamar os atributos da Super-Classe. O comando obrigatoriamente fica localizado na primeira linha do construtor cheio.

public Aluno(String nome, String email, Double nota1, Double nota2) {
		super(nome, email);
		this.nota1 = nota1;
		this.nota2 = nota2;
}

O comando Java super, “super sem parêntese” , no método da sub-classe tem a finalidade de chamar o método com o mesmo nome da Super-Classe.

@Override
public String toString() {
	return  super.toString() + "Aluno [nota1=" + nota1 + ", nota2=" + nota2 + "]";
}

Apresentação das Classes no Java

Super-Classe Pessoa possui os atributos comuns as Sub-Classes Aluno e Professor.

package entity;

public class Pessoa {

	private String nome;
	private String email;
	
	public Pessoa() {
	}

	public Pessoa(String nome, String email) {
		super();
		this.nome = nome;
		this.email = email;
	}
	
	@Override
	public String toString() {
		return "Pessoa [nome=" + nome + ", email=" + email + "]";
	}

	public String getNome() {
		return nome;
	}
	public void setNome(String nome) {
		this.nome = nome;
	}
	public String getEmail() {
		return email;
	}
	public void setEmail(String email) {
		this.email = email;
	}	
}

Sub-Classes Aluno e Professor com esses atributos específicos.

package entity;

public class Aluno extends Pessoa {
	
	public Double nota1;
	public Double nota2;
	public transient Double media;
	
	public Aluno() {
	}

	public Aluno(String nome, String email, Double nota1, Double nota2) {
		super(nome, email);
		this.nota1 = nota1;
		this.nota2 = nota2;
	}

	@Override
	public String toString() {
		return  super.toString() + "Aluno [nota1=" + nota1 + ", nota2=" + nota2 + "]";
	}

	public Double getNota1() {
		return nota1;
	}
	public void setNota1(Double nota1) {
		this.nota1 = nota1;
	}
	public Double getNota2() {
		return nota2;
	}
	public void setNota2(Double nota2) {
		this.nota2 = nota2;
	}
	public Double getMedia() {
		return media;
	}
	public void setMedia(Double media) {
		this.media = media;
	}
}
package entity;

public class Professor extends Pessoa {
	
	private Integer matricula;
	private Double salario;
	
	public Professor() {
	}

	public Professor(String nome, String email, Integer matricula,
			Double salario) {
		super(nome, email);
		this.matricula = matricula;
		this.salario = salario;
	}

	@Override
	public String toString() {
		return super.toString() + "Professor [matricula=" + matricula + ", salario=" + salario
				+ "]";
	}

	public Integer getMatricula() {
		return matricula;
	}
	public void setMatricula(Integer matricula) {
		this.matricula = matricula;
	}
	public Double getSalario() {
		return salario;
	}
	public void setSalario(Double salario) {
		this.salario = salario;
	}
}    

Demonstrando a execução

package main;

import entity.Aluno;
import entity.Professor;

public class Main {
	
	public static void main(String[] args) {
		
		// Herança 
		// Instanciando os objetos pelas Sub-Classes		
		
		Aluno a = new Aluno("Jose","jose@gmail.com",10.,8.);	
		System.out.println(a);
		
		//----------------------
		
		Professor p = new Professor("Luiz","luiz@gmail.com",123,3000.);	
		System.out.println(p);		
	}
}