heranca - F4NT0/J4V4 GitHub Wiki
Generalização
- Generalização é o compartilhamento de atributos,operações e relacionamentos entre classes
- Essas Classes devem possui um relacionamento hierárquico para que a generalização aconteça
- O que a Generalização Possibilita:
- Possibilita a derivação de tipos mais específicos a partir de um tipo mais genérico
- Uma Classe pode ser definida de forma abrangente e depois ser refinada nas chamadas SubClasses
- A classe mais generalizada se chama SuperClasse e as classes conectadas a ela se chamam SubClasses
- Subclasses herdam os atributos,operações e relacionamentos da superclasse,permitindo modificações diferentes em cada classe usando as informações da SuperClasse.
- Classe Mais Geral: SuperClasse
- Classes Mais detalhadas: SubClasses
Herança
- É um mecanismo de reutilização de Código para atributos e métodos em comum em várias classes
- A ideia central de heranças é que novas classes são criadas a partir de classes já existentes
- Heranças seguem as ideias transmitidas na Generalização
- os Métodos e Variáveis definidos na SuperClasse Não são Declarados nas SubClasses
- Como Exemplo, queremos controlar os Funcionários de uma Empresa, mas nessa Empresa Existem diversos tipos de Funcionarios, portanto a Classe Funcionario é a SuperClasse e a informação de cada tipos de Funcionario são as SubClasses:
Tipo de Funcionario |
Informações relevantes |
Informações Gerais |
Motorista |
Carteira De Motorista,Data de expiração da Carteira |
nome,cpf,codigo de trabalhador |
Secretário |
Secretario de quem,Andar que trabalha |
nome,cpf,codigo de trabalhador |
Diretor |
Sala onde Trabalha,tempo na direção |
nome,cpf,codigo de trabalhador |
- Só fiz esses trabalhadores como exemplo
- Podemos ver que todos os 3 Funcionarios possuem informações em Comum, portanto serão as informações que irão se colocados na SuperClasse Funcionario
//criando a SuperClasse Funcionario
public class Funcionario{
private String nome;
private int cpf;
private int codigoTrabalhador;
public Funcionario(String nome,int cpf,int codigoTrabalhador){
this.nome = nome;
this.cpf = cpf;
this.codigoTrabalhador = codigoTrabalhador;
}
//Getters:
public String getNome(){return nome;}
public int getCpf(){return cpf;}
public int getCodigo(){return codigoTrabalhador;}
//Neste exemplo não precisamos de Setters
@Override
public String toString(){
return getNome() + " " + getCpf() + " " + getCodigo();
}
}
- Nas SubClasses Motorista,Secretario e Diretor iremos utilizar as Variaveis e Métodos definidos em Funcionario
- Para chamar a Classe Funcionario nas Subclasses iremos usar a palavra reservada extends
- Para chamar o valor das Variáveis nas SubClasses iremos usar o método chamado super()
- no toString() existe uma forma de sobrescrever métodos da superclasse usando a Palavra super antes do nome do método
//classe Motorista
public class Motorista extends Funcionario{
private int cartMot;
private String dataExp;
//no construtor podemos colocar parametros usando as variaveis da SuperClasse
public Motorista(String nome,int cpf,int codigo,int cartMot,String dataExp){
super(nome,cpf,codigo); //método que irá chamar os valores das variaveis da SuperClasse
this.cartMot = cartMot;
this.dataExp = dataExp;
}
//getters são somente das variaveis desta classe
public int getCarteira(){return cartMot;}
public String getDataExp(){return dataExp;}
//
@Override
public String toString(){
return super.toString() + " " + getCarteira() + " " + getDataExp();
}
}
- Essa Classe do Motorista é um exemplo completo de como a Herança funciona, assim será com as outras Subclasses definidas anteriormente, fazendo a chamada da SuperClasse na SubClasse e trazendo as variaveis da SuperClasse e definindo qual é as Variaveis da propria SubClasse