-
O polimorfismo é caracterizado quando duas ou mais classes distintas tem métodos de mesmo nome, de forma que uma função possa utilizar um objeto de qualquer uma das classes polimórficas, sem necessidade de tratar de forma diferenciada conforme a classe do objeto.
-
O polimorfismo é caracterizado quando duas ou mais classes distintas tem métodos de mesmo nome, de forma que uma função possa utilizar um objeto de qualquer uma das classes polimórficas, sem necessidade de tratar de forma diferenciada conforme a classe do objeto
Exemplos
Suponha a seguinte classe escrita em Java:
public abstract class OperacaoMatematica { public abstract double calcular(double x, double y);}
Esta é uma classe abstrata que representa qualquer operação matemática. Podemos imaginar diversas operações que se encaixam na sua interface, como soma, subtração, multiplicação ou divisão, entre outras. Note que, mesmo que a natureza do cálculo mude, a semântica do método calcular não muda, ou seja, ele sempre calculará o resultado da operação matemática que está sendo trabalhada. Definamos então, duas subclasses, Soma e Subtracao, que implementam a classe OperacaoMatematica
:
public class Soma extends OperacaoMatematica { public double calcular(double x, double y) { return x + y; }} public class Subtracao extends OperacaoMatematica { public double calcular(double x, double y) { return x - y; }}
O seguinte trecho de código demonstra o uso do polimorfismo:
public class Contas { public static void mostrarCalculo(OperacaoMatematica operacao, double x, double y) { System.out.println("O resultado é: " + operacao.calcular(x, y)); } public static void main(String args[]) { // Primeiro calculamos uma soma Contas.mostrarCalculo(new Soma(), 5, 5); // Imprime o resultado é: 10 // Depois uma subtração Contas.mostrarCalculo(new Subtracao(), 5, 5); // Imprime o resultado é: 0 }}
Embora o método calcular tenha sido chamado duas vezes no interior de mostrarCalculo, os tipos (isto é, as classes das instâncias) utilizados como parâmetros eram diferentes. De fato, o comportamento de cada tipo era exatamente oposto. É comum definir sobrecarga de métodos ou simplesmente sobrecarga como uma forma de polimorfismo (chamado de polimorfismo ad-hoc). Nesse caso, implementa-se métodos com um mesmo nome, mudando apenas a lista de parâmetros que ele recebe. Digamos
public static void mostrarCalculo(Soma soma, double x, double y) { System.out.println("O resultado é: " + soma.calcular(x, y)); } public static void mostrarCalculo(Subtracao subtracao, double x, double y) { System.out.println("O resultado é: " + subtracao.calcular(x, y)); }
-
A alternativa C também não está incorreta? Um construtor não visa apenas a inicialização de atributos.
-
Creio que a alternativa C não esteja errada pelo fato de não tornar a afirmativa EXCLUSIVA.
Estaria errada se estive por exemplo:
um construtor visa inicializar os atributos e é executado automaticamente sempre que um novo objeto é criado, APENAS.
A afirmação não diz que o construtor pode apenas inicializar atributos.
Dica:
INCLUSIVAS: Itens certos prevêem exceções ou usam palavras inclusivas. Palavras chaves: Fundamental, em geral, em regra, pode, etc...
EXCLUSIVAS: Itens errados são muitos fortes, não deixando brechas para exceções. Palavras chaves: Nunca, sempre, obrigatoriamente, não, totalmente, apenas, jamais, sem exceções, etc...
-
A alternativa D é basicamente uma cópia do conceito de polimorfismo da página http://www.dca.fee.unicamp.br/cursos/PooJava/polimorf/index.html, ,alterando a parte final:
"Polimorfismo é o princípio pelo qual duas ou mais classes derivadas
de uma mesma superclasse podem invocar métodos que têm a mesma
identificação (assinatura) mas comportamentos distintos...".
A alternativa trocou o tempo "comportamentos distintos" por "mesmo comportamento", por isso está errada.
Quanto às demais:
A: o conceito de herança envolve, especialização e generalização. Superclasse é um conceito generalizado, e as subclasses representam a especialização.
B: apresentou um contraponto à POE - Programação Orientada a Eventos, conforme trecho no início do artigo em http://www.linhadecodigo.com.br/artigo/506/programacao-orientada-a-objetos.aspx. Um objeto pode existir sem um evento associado a ele.
C: Um dos objetivos do construtor de uma classe pode ser, sim, inicializar os valores da instância. Não apenas este, mas a questão não restringiu.
E: Métodos/Operações definem o comportamento da classe, e os valores presentes nos atributos do objeto definem seu estado atual.