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

Classe Abstrata x Interface

Ola,

Qual a necessidade de termos classes abstratas dentro de um projeto com classes de interface?

É apenas para evitar excesso de classes de interface, ou criar classes abstratas para ter uma melhor especificação na distribuição das classes de acordo com a regra de negócio como dado de exemplo neste curso?

Funcionário (interface), Funcionário Autenticável (classe abstrata), Gerente (subclasse), administrador (subclasse)...

Obrigado

5 respostas

public abstract class Funcionario { protected int matricula; protected Date dataAdmissao;

public abstract double calcularProdutividade();

public void gerarRelatorioProdutividade()

double produtividade = calcularProdutividade(); //gerarRelatorio } }

public class Gerente extends Funcionario{

public double calcularProdutividade(){ return 80.0; } }

/////////////////////////////////////////////////////////////////////////

public interface Funcionario(){ public static final NOME_EMPRESA = "EMPRESA123";

public double calcularProdutividade();

public default void gerarRelatorio(){ double produtividade = calcularProdutividade(); // gerarRelatorio } }

public class FuncionarioPadrao implements Funcionario{

public double calcularProdutividade(){ return 100.0; } }

Podemos ter o mesmo funcionamento utilizando ambas estratégias, mas as classes abstratas permitem a herança de estados, podendo herdar os atributos "matricula" e "dataAdmissao", enquanto que com interfaces , temos somente a herança de "tipo" , podendo um objeto FuncionarioPadrao ser referenciado também como um Funcionario.

em 2018 e o JDK 9 em diante, não existem bem motivos para se ter uma classe abstrata, já que uma interface faz basicamente a mesma coisa que classes abstratas. Meu uso de classe abstrata é com generics.

solução!

Interfaces também podem usufruir dos recursos de generics. E métodos em interfaces tem que possuir visibilidade public, enquanto que em classes abstratas vc pode definir métodos private e protected.

Atualmente um bom uso de classes abstratas(no meu entendimento) seria em akguma biblioteca/framework , em que vc queria controlar a extensão das funcionalidades.

Tem utilidade sim, usar ou não é uma questão bem complicada e/ou polêmica. E bagagem para tal discussão pode ser encontrado nos cursos/livros de OO e design patterns.

Interfaces ainda lidam apenas com constantes, enquanto posso manter parâmetros numa classe abstrata. É basicamente para o que você precisa. Mas meu uso de classe abstrata é muito reduzido a casos específicos.

Show pessoal

Obrigado

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