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

Por que ao trocar de ArrayList para Collection aparecem alguns erros de compilação? Eu havia entendido que o que definia o objeto seria o que foi declarado na instancia do objeto, nesse caso o "new Vector()".

    public static void main (String[] args){

      //  ArrayList<Conta> lista = new ArrayList<Conta>();

        Collection<Conta> lista = new Vector<Conta>();

        ContaCorrente cc = new ContaCorrente(11, 22);
        lista.add(cc);

        Conta cp = new ContaPoupanca(11,23);
        lista.add(cp);
        Conta cp2 = new ContaPoupanca(11,20);
       // lista.add(cp2);

        System.out.println(lista.size());

        System.out.println(lista.get(0));
        System.out.println(lista.get(1));
3 respostas
solução!

Collection não tem o método get.

Mesmo que Vector, que é a classe que você instanciou, tenha, não fará diferença, pois você está usando Collection, que é mais genérica. Então para acessar o get, você pode usar uma interface um pouco mais específica, como List... ou usar Vector diretamente.

Olá Bruno.

No caso da sua declaração, existem dois conceitos:

  • tipo da variável de referência, que no caso é Collection;
  • tipo do objeto instanciado, que é Vector.

Vector é uma Collection, por isso é possível usar uma variável de referência do tipo Collection para apontar para um objeto dele.

Mesmo que a sua referência aponte para um objeto do tipo Vector, essa referência só conhece os métodos de Collection.

Imagine que você criou uma classe Carro com vários métodos e realiza a declaração dele dessa forma:

Object carro = new Carro();

Irá compilar, pois o Carro é um Object (todo objeto em Java herda de Object), mas Object não tem como saber os métodos que tem em Carro, por isso ele consegue apenas o acesso aos seus próprios métodos.

Para entender melhor a vantagem de se fazer declarações como essa, você precisa se aprofundar nos conceitos de polimorfismo.

obrigado Edson Passos e Edu pela explicação. Não lembrava desse conceito de referencia e objeto, pra mim sempre poderia declarar com referencia genérica sem perder funcionalidades especificas do objeto. Valeu!