Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Construtores em interfaces

Olá pessoal, eu gostaria de saber se há como forçar uma classe a criar um construtor através de uma interface. Se eu tenho por exemplo várias classes para várias raças de cães, mas todas elas devem ter o construtor com os atributos peso, tamanho, etc. Eu não quero ter que ficar me lembrando de escrever isso em todas essas classes pois a chance de eu esquecer é grande. A solução que tenho atualmente é uma classe mãe (Cachorro) abstrata onde tenho esses atributos e o construtor. Se houver como forçar construtores pela interface eu gostaria de saber se nesse caso é mais valido eu manter a classe mãe ou implementar uma interface

2 respostas
solução!

Primeiro interface não tem construtor, já uma classe que você estende tem. Exemplo de interface:

public interface DAOGeneric<T extends EntityGeneric, ID> {

    public T save(T entity);
    public T merge(T entity);
    public void delete(T entity);
    public T find(ID id);
    public T find(T entity);
    public List<T> findAll();
    public Integer size();
}

Agora uma classe abstrata sim pode ter construtor;

public abstract class EntityGeneric {
    private int id;

    public EntityGeneric(int id) {
        this.id = id;
    }

    public int getId() {
        return id;
    }
}

E este para criar um novo construtor desta classe você utilizará o nome super(); funciona como se estiver chamando o construtor, e no caso tem que passar o atributo id no construtor da classe filha.

Exemplo:

public class State extends EntityGeneric {

    private String name;
    private String uf;

    public State(int id, String name, String uf) {
        super(id); // Aqui você coloca todos atributos que tem no construtor do EntityGeneric
        this.name = name;
        this.uf = uf;
    }
    /** Gets e Sets **/
}

Entendi, valeu Danilo!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software