Desculpe se causei polemica , bem …
Um programador JAVA experiente sabe que herança é uma faca de dois gumes , tem o lado bom e o lado ruim .
E acredite o lado ruim é ruim , lembro que qndo estava aprendendo java em meu primeiro projeto JAVA , um joguinho de rpg , tive que fazer refatoramento em umas 20 classes ( pq usava herança ).
Dito isso , e sendo sabido que a maioria das pessoas prefere a composição a herança , vamo tomar como premissa que herança é uma coisa ruim ( pelo menos pra min , claro que deve haver todo um estudo antes de falar isso ou de negar a herança em um projeto , mas pra MIM : COMPOSIÇÂO IS BETTER , note a enfase que essa é minha opinião e niguem tem que concordar ).
Bem voltando , herança é uma forma de errar no projeto ( por favor não vamos discutir aqui se isso é verdade ou não , só estou tentando explicar minha opinião ) , algo comum que fazia quando aprendi java é colocar construtor com parametros inicializando os atributos :
public class Pessoa {
//atributos
public Pessoa(String nome,String cpf) {
this.setNome(nome);
this.setCPF(cpf);
}
//gets and sets
}
Agora , como é comum na POO , começam a surgir novas classes na sua hierarquia usando herança fica algo assim :
public Funcionario extends Pessoa {
//novo atributo
private String cargo;
public Funcionario(String nome , String cpf , String cargo) {
setNome(nome);
setCPF(cpf);
setCargo(cargo);
}
//gets and sets
}
Pois bem , para boa parte dos programadores novos da linguagem , e sem a ajuda de uma IDE , o código acima esta correto .
Voce consegeu achar o erro ?
bem o erro e que pra construir um Funcionario vc construir Pessoa , mas pra construir uma pessoa vc precisa de nome e cpf.
Entao está faltando um “super()” lá dentro do construtor …
Sei la , talvez meu comentário foi infeliz mais é isso ai ! Tenho direito a opinião.
O codigo correto é :
public class Funcionario extends Pessoa{
public String cargo;
public Funcionario(String nome, String cpf) {
super(nome, cpf);
setCargo(cargo);
}
public String getCargo() {
return cargo;
}
public void setCargo(String cargo) {
this.cargo = cargo;
}
}
=P
Ou seja errei por causa do super logo o super e mais um dos erros que podem surgir por causa da herança ( outros erros : o losango mortal , uso errado da sobreposicao ou sobrecarga e etc. ).