Classe abstrata - Métodos obrigatórios (?)

Pessoal, tenho uma dúvida bem simples.
Não costumo utilizar classes abstratas, contudo tenho uma classe em meu sistema que faz operações de CRUD, e é o que preciso.
Porém, o meu CRUD não terá exclusão, gostaria de utilizar todos métodos da classe abstrata que tem operações de CRUD sem implementar o método de exclusão.

Pergunta:
Há como eu fazer isso, sem criar o método de exclusão e deixa-lo “em branco” - ou mesmo transformar minha classe em abstrata e criar outra classe que utiliza esta extends a classe que criei?

Obrigado.

Implemente a classe abstrata de CRUD.
Porém na implementação deixe o método de exclusão em branco e de preferencia com um comentário curto e objetivo sobre o por quê não foi implementado exclusão nele.

Olá, a pergunta foi se há utilizar a classe abstrata sem fazer isso - não é desejável deixar o “lixo” na classe, o método em branco! :lol:

Obrigado

O basico de um CRUD é, “Buscar, Editar, Criar e Remover”. Se não precisa do remover e tem sua classe abstrata, vejo duas alternativas:

  • Não coloca nenhum tipo de implementação no excluir da classe filha

  • Declara o método excluir sem que ela seja abstrato (não recomendo)

[quote=andrestrindade]Olá, a pergunta foi se há utilizar a classe abstrata sem fazer isso - não é desejável deixar o “lixo” na classe, o método em branco! :lol:

Obrigado[/quote]
Não tem como. Você é obrigado a fazer isso!

Outra coisa isso não é deixar lixo! Recomendo que você leia o livro Use a Cabeça - Padrões de Projeto!

Nesses casos você pode fazer como os colegas falaram e deixar o método em branco ou levantar uma exeção (UnsupportedOperationException) o que eu recomendo.

Você vai se deparar em muitos casos com isso. Se você, por exemplo, implementar o padrão State, fazer esse tipo de operação é obrigatório. Então não pense que você está fazendo algo errado.

Estenda da Classe Abstrata é sobrescreva os métodos que deseja.

:slight_smile:

Outra coisa que esqueci de dizer…além de deixar a implementação do remover em branco, use uma Interface no lugar dessa classe abstrata. É melhor :wink:

Interfaces estao aih para isso.

interface CRU { c() r() u() }

class MinhaClasse extends CRUDAbstrato implements CRU { c() { .. } r() { .. } u() { .. } d() { .. } }Porém, na hora de instanciar, tu faz:

CRU instancia = new MinhaClasse();

Esta é uma das formas elegantes de resolver questoes como essa.