1. java
  2. android
  3. c#
  4. .net
  5. javascript
  6. php
  7. jquery
  8. html
  9. sql

Herança OO - Sobrescrever tipo do parâmetro do get e do set

Olá.

Tenho três classes (MovimentacaoAbstract.java que é herdada por PedidoAbstract.java que é herdada por PedidoVenda.java). E cada uma dessas tem uma lista com uma classe filha, respectivamente (ItemAbstract.java que é herdada por ItemPedidoAbstract.java que é herdada por ItemPedidoVenda.java).

Na classe MovimentacaoAbstract tenho os seguintes métodos abstratos:

public abstract List<? extends ItemAbstract> getItensAbstract();
public abstract void setItensAbstract(List<? extends ItemAbstract> itensAbstract);

Até ai tudo bem. Quando herdo na classe PedidoAbstract faço uma alteração no get para restringir o tipo do parâmetro nas classes que herdarão a classe PedidoAbstract. Ficando assim:

@Override
public abstract List<? extends **ItemPedidoAbstract**> getItensAbstract();

isso também funciona bem.

A minha intenção é que as classes que herdarem a PedidoAbstract não aceitem qualquer classe que herde de ItemAbstract, e sim, somente classes que herdem de ItemPedidoAbstract.

A minha dúvida está no método SET. Nele eu não consigo mudar o tipo do parâmetro.

Dá erro quando coloco desta forma:

@Override
public abstract void setItensAbstract(List<? extends **ItemPedidoAbstract**> itensAbstract);

O Eclipse mostra a seguinte mensagem de erro:

Multiple markers at this line
    - Name clash: The method setItensAbstract(List<? extends ItemPedidoAbstract>) of type PedidoAbstract has the same erasure as setItensAbstract(List<? extends ItemAbstract>) of type 
     MovimentacaoAbstract but does not override it
    - The method setItensAbstract(List<? extends ItemPedidoAbstract>) of type PedidoAbstract must override or implement a supertype method

Gostaria de saber qual a melhor forma de fazer o que estou querendo.

Desde já agradeço.

  1. Você vai ver essas setas em qualquer página de pergunta. Com elas, você pode dizer se uma pergunta ou uma resposta foram relevantes ou não.
  2. Edite sua pergunta ou resposta caso queira alterar ou adicionar detalhes.
  3. Caso haja alguma dúvida sobre a pergunta, adicione um comentário. O espaço de respostas deve ser utilizado apenas para responder a pergunta.
  4. Se o autor da pergunta marcar uma resposta como solucionada, esta marca aparecerá.
  5. Clique aqui para mais detalhes sobre o funcionamento do GUJ!

2 respostas

Não é a resposta que estava procurando? Procure outras perguntas com as tags orientação-a-objetos herança java-ee polimorfismo classe-abstrata ou faça a sua própria pergunta.