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

Dúvida no Ex. 5 da Aula 3 - Começando com Orientação a objetos

Se essas variáveis do exercício guardam somente uma espécie de "ponteiro" que referencia o objeto (local da memória em que o objeto se encontra), por que eu tenho que declará-las já falando a qual classe pertencem? (Funcionario f1, Funcionario f2, Carro c1, Carro c2). Por que não uma variável genérica que serve para qualquer classe? (Ponteiro f1, Ponteiro f2, Ponteiro c1, Ponteiro c2)

3 respostas
solução!

Oi Guilherme,

Resposta simples: Porque Java é assim :)

Resposta mais elaborada:

Java é uma linguagem estaticamente tipada. Isso significa que qq variável possui o seu tipo associado. Mais ainda, qq variável possui o seu tipo explicitamente associado.

Isso pode ser útil pois o compilador pode fazer várias verificações de sintaxe antes de rodar a aplicação. Além disso, ferramentas como Eclipse podem acompanhar alterações (refatorações) no seu código mais fácil e ágil porque existem esses tipos explícitos. Para nos desenvolvedores, esses tipos ajudam entender o código, é uma espécie de documentação.

Por exemplo imagine um método assim:

void calcula(Ponteiro p) {

}

O que vc pode fazer com esse ponteiro? O que ele representa? Qual é a responsabilidade?

Com Java vc escreve um pouco mais código por causa dos tipos mas de longo prazo isso normalmente se paga (ou facilita a manutenção), ok?

abs

Obs: Tipagem é tópico muito polemico entre os desenvolvedores, tem defensores de ambos os lados, da tipagem dinâmica e da tipagem estática.

Olá Guilherme! Existe uma forma de fazer isso sim, basta utilizar a classe Object, pois todas as classes em java herdam de Object. Então suas variáveis ficariam Object f1, Object f2 e etc...

Porém isso gera um problema, quando declaramos uma variável em java apenas podemos acessar os métodos e atributos daquele tipo a qual a variável pertence.

Então veja bem, se você utilizar uma variável do tipo Object você apenas poderá acessar os métodos da classe Object (getClass(), clone()) e não poderia utilizar os métodos que você declarou em sua classe Funcionario. Por isso, em java sempre buscamos declará a variável com o mesmo tipo da do objeto, ou em outros casos também podemos utilizar Polimorfismo, mas isso é outro caso.

Vale ressaltar que tudo dito pelo Nico está correto, escrevi a resposta e quando vi ele já tinha respondido.

Enfim, espero ter ajudado! Bons Estudos!

Nico e Romário, obrigado pela ajuda! Ambas as respostas me ajudaram.

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software