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)

Garanta sua matrícula hoje e ganhe + 2 meses grátis

Continue sua jornada tech com ainda mais tempo para aprender e evoluir

Quero aproveitar agora
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.