O polimorfismo em Java pode ser por sobrecarga ou sobreposição. Analise as declarações de classes para identificar
aquelas com declarações de métodos polimórficos por sobrecarga.
I. class Data {
int setData (float width, float height, float length) { ?}
int setData (float width) {?}
int setData (int width, int height) {?}
}
II. class Tool {
Object setData (int width) {?}
}
class Data extends Tool {
int setData (float width, float height) {?}
int setData (int width) {?}
}
III. class Tool {
Object setData (float width, float height) {?}
}
class Data extends Tool {
int setData (float width, float height) {?}
}
A (s) declaração (ões) de classe (s) identificada (s) corretamente encontra (m)-se em
A.I apenas.
B.II apenas.
C.III apenas.
D.I e II apenas.
E.II e III apenas.
Como fala isso na questão: .…métodos polimórficos por sobrecarga. eu achei que fosse a letra B, mas no gabarito está como a letra D.
O que vocês acham?
a opção III ta errada por que quando a classe Data estende Tools, ela simplemente implemente o seu método, e não está ocorrendo sobregarda de métodos como na I e na II…
A
ADEMILTON
Dizemos que o método foi sobrecarregado quando sua assinatura é modificada, ou seja: a declaração de parâmetros passados para o método variaram em quantidade ou em tipos. É o que vemos em I e II, então bate com o gabarito.
romarcio
ADEMILTON:
Dizemos que o método foi sobrecarregado quando sua assinatura é modificada, ou seja: a declaração de parâmetros passados para o método variaram em quantidade ou em tipos. É o que vemos em I e II, então bate com o gabarito.
Isso eu sei, é que eu fiquei em dúvida na questão do polimorfismo envolvido na questão.
Polimorfismo pra mim é algo que resulta de Herança, o que acontece na opção II e não acontece na opção I.
O polimorfismo proporcionado pela herança seria em relação ao tipo, assim como está no seu comentário.
Quando se usa sobrecarga há um polimorfismo com métodos. Pois eles tem o mesmo nome, mas possuem assinatura diferente e podem ter implementações diferentes.
Y
YvGa
Se considerar a origem da palavra, entao overload é um tipo de polimorfismo sim. Embora nos costumamos ouvir polimorfismo só em casos de metodos iguais implementados por subclasses.
Nao sei se existe algo que seja comumente aceito sobre o que pode ou nao pode ser considerado polimorfismo em software. Nesse caso overload pode ser considerado sim.
Apesar que eu acho que isso so vai confundir quem le sobre o assunto.
Se considerar a origem da palavra, entao overload é um tipo de polimorfismo sim. Embora nos costumamos ouvir polimorfismo só em casos de metodos iguais implementados por subclasses.
Nao sei se existe algo que seja comumente aceito sobre o que pode ou nao pode ser considerado polimorfismo em software. Nesse caso overload pode ser considerado sim.
Apesar que eu acho que isso so vai confundir quem le sobre o assunto.
Obrigado pelo link, mas parece ser um assunto difícil de se chegar a uma decisão.
Por exemplo, no livro de certificação da Keithy Sierra, quando se fala em polimorfismo, se fala em herança. Por esse motivo é que fico mais em dúvida se apenas uma sobrecarga em uma mesma classe, sem herança envolvida, poderia ser polimorfismo.
novato25
Ué… mas não está certo? em I apresenta polimorfismo por sobrecarga e em II apresenta tanto polimorfismo por sobrecarga quanto por sobreposição. Já na III apresenta apenas polimorfismo por sobreposição. Como se está perguntando qual ou quais declarações contém métodos polimórficos por sobrecarga, as opções seriam I e II. Ou seja, letra D.
S
Schuenemann
romarcio:
Polimorfismo pra mim é algo que resulta de Herança, o que acontece na opção II e não acontece na opção I.
Sobrecarga também é conhecida como polimorfismo estático.
E polimorfismo dinâmico resulta de herança em Java. Em linguagens de tipagem dinâmica, tipo Ruby, Python, JavaScript, você pode ter isso:
Aceitando tanto objetos de A quanto de B, sem haver herança envolvida.
A III está errada porque ele alterou o retorno.
romarcio
Eu deveria ter analisado melhor a Pergunta, e ver que estavam referenciando o Polimorfismo a sobrecarga e sobreposição, e não ao polimorfismo referente a herança.
É que nunca tinha avaliado uma sobrecarga ou sobreposição como sendo algo polimórfico, então acabei de cara descartando a alternativa I.
novato25
Bom, em relação ao polimorfismo estão corretas a I e a II. Mas a II e a III não compilam por causa da mudança do tipo de retorno dos métodos sobrepostos.
romarcio
A a 3 não compila por que quando se sobrescreve um método, o retorno deve ser igual ou um retorno que seja uma subclasse do retorno do método original.
Por exemplo:
Mas no caso, o tipo int é um primitivo, não uma classe.
novato25
A a 3 não compila por que quando se sobrescreve um método, o retorno deve ser igual ou um retorno que seja uma subclasse do retorno do método original.
Por exemplo: