A classe Object é mãe de todas classes do java,tanto as que são definidas pelo usuário como as que estão prontas dentro de pacotes como java.lang,java.util e outros?
A classe Object é mãe de todas classes do java,tanto as que são definidas pelo usuário como as que estão prontas dentro de pacotes como java.lang,java.util e outros?
Outra dúvida.
public class TestArrayReferencias {
public static void main(String[] args) {
//int[] idades = new int[5];
Object[] contas = new Object[5];
ContaCorrente cc1 = new ContaCorrente(22, 11);
contas[0] = cc1;
ContaPoupanca cc2 = new ContaPoupanca(22, 22);
contas[1] = cc2;
Cliente cliente = new Cliente();
contas[2] = cliente;
//System.out.println(cc2.getNumero());
** ---> System.out.println( contas[1].getNumero() ); <---**
ContaPoupanca ref = (ContaPoupanca) contas[1]; //type cast
System.out.println(cc2.getNumero());
System.out.println(ref.getNumero());
}
} Porque System.out.println( contas[1].getNumero() ); parou de funcionar sendo que nesta posição está a referência para o objeto(instância) da classe ContaPoupanca,onde está o método getNumero() ,apesar que contas é do tipo classe mais genérica,ou seja,classe Object,mas ela guarda uma referência para uma classe mais específica que é a classe ContaPoupanca,não deveria funcionar sem ser preciso fazer casting,como está no decorrer do código?
Oie Samuel, tudo bem contigo?
Respondendo a primeira pergunta:
Sim, a classe Object
é mãe de todas as outras classes do mundo Java, um dos métodos que conseguimos usar por conta disso é o toString
, pois é um dos métodos presentes na classe Object
.
Segunda pergunta:
O código System.out.println( contas[1].getNumero() );
não funciona, pois a referência do objeto que está dentro da posição 1 do vetor contas
é Object
, e por isso ele só consegue chamar métodos e atributos que existem na classe Object
. Então nessa situação você precisaria fazer o "casting" para funcionar.
Já o código System.out.println(cc2.getNumero());
funciona, pois ele está chamando a variável que está com a referência de "ContaPoupanca", e essa referência permite o acesso aos métodos específicos.
Segue o paralelo abaixo:
System.out.println( contas[1].getNumero() );
// não funciona, pois possui uma referência genérica, "Object", por isso precisa do cast para usar o método "getNumero"
System.out.println(cc2.getNumero());
// funciona, pois a variável "cc2" tem um referência específica, "ContaPoupanca", consegue acessar os métodos específicos como o "getNumero"
Na próxima vez que tiver 2 dúvidas, recomendo que separe em um tópico diferente já que isso ajuda muito outros alunos a encontrarem esse tópico se tiverem uma dúvida semelhante.
Espero ter conseguido te ajudar!
Se tiver qualquer outra dúvida é só mandar por aqui no fórum :)
Bom dia,Igor. Ok.Abs.