Classes e métodos abstratos

7 respostas
Andre_Brito

Galera, sou meio novo em Java e tenho uma dúvida quanto a métodos abstratos.
Pra que eles servem? Eles não tem implementação alguma, certo? (interface). Mas por que ele sempre fica na superclasse, sendo que ele também é implementado nas subclasses dessa superclasse? Isso parece que é reescrever código (que é o que a herança tenta evitar, certo?).

Valeu por enquanto.

7 Respostas

T

Um método abstrato é algo que você promete implementar em uma subclasse.
Nesse ponto lembra a história da “interface” (que é algo que você promete implementar em uma classe que “implements” a tal interface).
Não vejo nenhuma reescrita de código aí; você só copia a definição, mas não a implementação.

Andre_Brito

Ok. Mas qual então o objetivo de um método abstrato?!

Claudio_Nazzari

O Metodos Abstratos são FUNDAMENTAIS quando voce quer utilizar metodos genericos!
Voce pode usar um metodo implementado na classe Pai que tenha uma chamada sobre um metodo abstrato, e a implementação do metodo abstrato varia de acordo com a classe filha, ou seja, o metodo da classe pai chama o metodo abstrato da classe filha.

Exemplo: Em um CRUD, uma classe abstrata Pai ActionDefault pode conter um metodo create que chame um BusinessObject especifico…

public ActionForward create(ActionMapping map, ActionForm form,
 HttpServletRequest request, HttpServletResponse response) throws Exception {
        
        TransferObject to = getTransferObject(form, request);
        getBusinessObject().create(to);
        return map.findForward(CREATE_PAGE);
}

protected abstract BusinessObject getBusinessBusinessObject();

… Aonde voce informa o businessObject que ira executar na classe filha:

public class PessoaAction extends ActionDefault {
    protected String getBusinessObject() { return new PessoaBusinessObject(); }
}
public class CarroAction extends ActionDefault {
    protected String getBusinessObject() { return new CarroBusinessObject(); }
}

Com isso o metodo Create serve para ambos casos de uso =)

Andre_Brito

Claudio,

Isso já é um pouco muito avançado para mim, mas prometo que assim que entender o propósito de uma classe e de um método abstrato eu volto a ler e comentar isso com você :slight_smile:

LPJava

bom vamos la… tentar explicar de uma forma mais simples para vc… o objetivo de metodos abstratos é você deixar para a subclasse escolher como vai implementar esse método. No mundo real vc tem: Um Carro que tem cor, placa, marca certo? Entao qualquer carro tem isso… confere? Desde o fusca a ferrari… entao analise o codigo abaixo:

abstract class Carro{
abstract void cor();
abstract void placa();
}

na linha acima é uma classe carro abstrata, (é importante vc saber o conceito do que algo abstrato www.google.com.br) isso pq definir ela com o modificador abstract, mais a funcionalidade disso é dizer assim: " olha a class concreta que extends a mim deve implementar todos os meus metodos" mais pq? Por que tudo que é concreto tem q ter um valor.(vamos falar assim para ficar mais facil).

//class concreta
class Ferrari extends Carro{
void cor(){
System.out.println("vermelho");}
void placa(){
System.out.println("JHKL1025");
}

O que aconteceu agora? Bom Ferrari É-UM carro que tem a cor é vermelho e a placa é JHKL1025.

Ai você deve estar se perguntando sim, mais para que vou usar isso no mundo da programacao… imagine comigo agora… o seguinte, você desenvolve um sistema para uma industria de automoveis… ai vamos dizer que antes de o carro ir para linha de produção… o cara deve chegar lá no sistema e configurar os dados do carro… tipo. A ford, ela possui vamos modelos de carros e suas respectivas cores… agora vem o desenvolvimento… quando vc for projetar o sistema vai querer criar cada class para cada tipo de carro que a fabrica tem? Não é melhor vc fazer lá uma classe abstracta e e fica a criterio de quem for projetar o carro definir os dados do carro… lembrando que todo carro sempre tem as mesmas caracteristicas. (nome, cor, numero de portas etc).
Entao seguindo ainda nosso exemplo vamos dizer que outro departamento da fabrica que produz carro populares vai mandar o setor de produção fazer outro carro.

class Celta extends Carro{
void cor() {
System.out.println("Rosa");}
void placa(){
System.out.println("HJU677");}

percebeu a essencia de se fazer uma classe abstrata? entao é ± isso ai… tentei explicar de uma forma bem simples… ja que vc está começando espero que vc tenha pegado ai… qualquer coisa… so gritar ai …

flw!! abraço!

Andre_Brito

LPJava,

Você me esclareceu muitos conceitos que eu tinha dúvidas. Simplificando, uma método abstrato implementa um método sem corpo que vai ser (o corpo) feito pela classe concreta? E toda classe concreta nesse contexto é uma subclasse e toda classe abstrata é uma superclasse??

MUITO obrigado!
Abraço!

LPJava

dedejava:
LPJava,

Você me esclareceu muitos conceitos que eu tinha dúvidas. Simplificando, uma método abstrato implementa um método sem corpo que vai ser (o corpo) feito pela classe concreta? E toda classe concreta nesse contexto é uma subclasse e toda classe abstrata é uma superclasse??

MUITO obrigado!
Abraço!

um método abstrato tem sempre um modificador abstract e termina com ;

sim, ela sempre será superclasse de alguma subclass.

Criado 9 de outubro de 2007
Ultima resposta 11 de out. de 2007
Respostas 7
Participantes 4