Dúvida curso Caulem FJ11

Pessoal,

Faço o curso de Si e estou estudando java pelas apostilas Caulem por conta própia.

Enfim, tive uma dúvida ao trabalhar com um determinada herança que estou desenvolvendo em um exercicio.

[code]abstract class Funcionario{

protected String nome;
protected double idade;
protected String cpf;
protected String rg;

Funcionario(String nome, double idade, String cpf, String rg){

	this.nome  = nome;
	this.idade = idade;
	this.cpf   = cpf;
	this.rg    = rg;
}

}[/code]

[code]abstract class FuncionarioAutenticavel extends Funcionario{

FuncionarioAutenticavel(String nome, double idade, String cpf, String rg) {
	super(nome, idade, cpf, rg);
}	

}
[/code]

[code]class Diretor extends FuncionarioAutenticavel{

  double id_diretor;

  Diretor(String nome, double idade, String cpf, String rg) {
	super(nome, idade, cpf, rg);
   }

public double getId_diretor() {
	return id_diretor;
}

public void setId_diretor(double id_diretor) {
	this.id_diretor = id_diretor;
}

}[/code]

Bom ate ai tudo bem, vai compilar, mas achei o código meio estranho.

O construtor do Diretor vai mandar os atributos para o sua super classe, ou seja, para a classe FuncionarioAutenticavel, e o “FuncionarioAutenticavel” vai setar esses
mesmos atributos para sua super classe, no caso Funcionario.

Estou fazendo essa classe intermediaria FuncionarioAutenticavel, pois estou entrando na sessão de Interfaces da apsotila da Caulem.

Esse código esta correto, ou existe uma forma mais facil de trabalhar com o construtor da classe Funcionario?

Muito obrigado desde ja.

Olá dertyu765

Olha, você tá pedindo para avaliar a estrutura do código, mas já tá se explicando na parte que diz:

[quote]Estou fazendo essa classe intermediaria FuncionarioAutenticavel, pois estou entrando na sessão de Interfaces da apsotila da Caulem. [/quote]

Mas para dar minha opinião, digo:

  • Não tem necessidade de colocar a classe Funcionario e a classe FuncionarioAutenticavel como abstratas. Pois você está dando implementação e nenhuma especificação.
  • Não entendi o motivo da classe FuncionarioAutenticavel, pois é na prática uma duplicação da classe Funcionario;
  • Como o Diretor estende FuncionarioAutenticavel se diz que Diretor é um FuncionarioAutenticavel por tanto, tem todos os atributos que um FuncionarioAutenticavel e por consequencia todos os atributos de Funcionario. Uma forma mais fácil é retirar a camada de FuncionarioAutenticavel (já que é identica a classe Funcionario) e nada mais.

e sobre INTERFACE leia: http://www.guj.com.br/articles/123

Depende da sua lógica e/ou do quer for fazer, eu já preferia usar interface em FuncionarioAutenticavel no caso de abstract, e sem herança para Funcionario, Assim Diretor herdava as características de Funcionario() e poderia implementar a interface FuncionarioAutenticavel(), ou seja assinando um contrato de que diretor é um FuncionarioAutenticavel(), e todos que forem autenticavel apenas implementa FuncionarioAutenticavel() ganhando o polimorfismo. Agora A chamada super Ficaria em Diretor, nesse caso Diretor() é um Funcionario().

Desculpe pessoal, fui com muiat sede ao pote.

Agora que entei na area de interface da apostila, eu criei e implementei uma interface Autentica.

Ja cortei aquele metodo abstrato intermadiario no lixo.

Muito obrigado pela ajuda.