Uma referência para um objeto de subclasse pode ser converti...
Uma referência para um objeto de subclasse pode ser convertida implicitamente em uma referência para um objeto de superclasse porque um objeto de subclasse é um objeto de superclasse, por herança. Existem, portanto, maneiras possíveis de misturar e corresponder referências para superclasse e referências para subclasse com objetos de superclasse e objetos de subclasse. (DEITEL & DEITEL, 2003, p.446).
Analise as afirmativas abaixo com relação à possibilidade de se misturar as referências às subclasses/superclasses e assinale (V) para verdadeiro ou (F) para falso.
( ) Fazer referência a um objeto de superclasse com uma referência para superclasse é simples e direto.
( ) Fazer referência a um objeto de subclasse com uma referência para subclasse não é direto.
( ) Fazer referência a um objeto de subclasse com uma referência para superclasse é simples e direto, porque o objeto de subclasse também é um objeto de uma superclasse.
( ) Fazer referência a um objeto de superclasse com uma referência para subclasse é simples e direto.
De acordo com as afirmações, a sequência correta é
Gabarito comentado
Confira o gabarito comentado por um dos nossos professores
A alternativa correta é a letra A - V, F, V, F. Vamos entender o porquê dessa resposta ser a correta e mergulhar um pouco nos conceitos de Orientação a Objetos que são aplicados aqui.
A Orientação a Objetos é um paradigma de programação que utiliza objetos para representar coisas do mundo real ou conceitos abstratos e suas interações. Um dos conceitos fundamentais nesse paradigma é o de herança, que permite que uma classe herde características (atributos e métodos) de outra classe, chamada de superclasse.
Quando uma classe herda de outra, dizemos que a classe filha (ou subclasse) é um tipo da classe pai (ou superclasse). Isso significa que objetos da subclasse podem ser tratados como se fossem objetos da superclasse. Isso é conhecido como polimorfismo.
Agora vamos analisar as afirmações:
- Fazer referência a um objeto de superclasse com uma referência para superclasse é simples e direto. Isso é verdadeiro porque isso está de acordo com a definição básica de como objetos e referências são usados em Orientação a Objetos.
- Fazer referência a um objeto de subclasse com uma referência para subclasse não é direto. Isso é falso. Referenciar um objeto de subclasse com uma referência de subclasse é igualmente direto, já que você está trabalhando dentro do mesmo tipo.
- Fazer referência a um objeto de subclasse com uma referência para superclasse é simples e direto, porque o objeto de subclasse também é um objeto de uma superclasse. Isso é verdadeiro devido ao conceito de polimorfismo; o objeto da subclasse pode ser referenciado por um tipo superclasse porque ele herda da superclasse.
- Fazer referência a um objeto de superclasse com uma referência para subclasse é simples e direto. Isso é falso. Não é possível fazer isso diretamente, porque um objeto de superclasse não possui todas as características de uma subclasse específica, e tal tentativa resultaria em um erro de compilação a menos que fosse feito um cast explícito, o qual ainda poderia falhar em tempo de execução se o objeto de fato não fosse uma instância da subclasse.
Assim, podemos confirmar que a sequência correta é V, F, V, F, correspondendo à alternativa A.
Clique para visualizar este gabarito
Visualize o gabarito desta questão clicando no botão abaixo
Comentários
Veja os comentários dos nossos alunos
É só lembrar o seguinte: B é filho de A, então A = B, mas B não pode receber A.
Fazer referência a um objeto de superclasse com uma referência para superclasse é simples e direto.
CORRETO. Superclasse pode referenciar a superclasse (A=A)
Fazer referência a um objeto de subclasse com uma referência para subclasse não é direto.
ERRADO. Uma subclasse pode receber uma subclasse (B=B)
Fazer referência a um objeto de subclasse com uma referência para superclasse é simples e direto, porque o objeto de subclasse também é um objeto de uma superclasse.
CORRETO. Uma superclasse pode receber uma subclasse. O Contrário que não pode. (A=B)
Fazer referência a um objeto de superclasse com uma referência para subclasse é simples e direto.
ERRADO. B não pode receber A.
LETRA A
Mano que questão complicada de se ler da porra, mais difícil entender o que avaliador quer do que a resposta em si.
Rosana Andrade foi magistral na explicação.
Nunca tinha ouvido falar nesses termos "Referência direta" e "Referência indireta"
Seja "Pokemon" uma superclasse e "Pikachu" uma subclasse:
(V) Fazer referência a um objeto de superclasse com uma referência para superclasse é simples e direto.
É direto. Todo Pokemon é um Pokemon
Pokemon pokemon = new Pokemon()
(F) Fazer referência a um objeto de subclasse com uma referência para subclasse não é direto.
É direto. Todo Pikachu é um Pikachu
Pikachu pikachu = new Pikachu()
(V) Fazer referência a um objeto de subclasse com uma referência para superclasse é simples e direto, porque o objeto de subclasse também é um objeto de uma superclasse.
É direto. Todo Pikachu é um Pokemon
Pokemon pikachu = new Pikachu()
(F) Fazer referência a um objeto de superclasse com uma referência para subclasse é simples e direto.
Não é direto. Nem todo Pokemon é um Pikachu, Logo, preciso fazer um cast explícito
Pikachu pokemon = (Pikachu) new Pokemon()
Clique para visualizar este comentário
Visualize os comentários desta questão clicando no botão abaixo