SEIS showInputDialog( )?

15 respostas
N
import javax.swing.JOptionPane;

Estava olhando a documentação da Java API: http://java.sun.com/javase/6/docs/api/

Verifiquei que existem seis métodos showInputDialog( )
Gostaria de saber se a afirmação abaixo é verdadeira:

“Os nomes são idênticos a única diferença entre eles é o número de argumentos, ou o tipo dos argumentos. Em P.O.O. isto é perfeitamente legal, ou seja, podemos sim criar métodos de mesmo nome, porém os tipos de argumentos deve ser diferentes, ou o número de argumentos. É desta forma que um método de mesmo nome é diferenciando dos demais.”

Foram criados métodos de mesmo nome? Ou todos foram derivados de um só?
Se foi derivado, posso criar um método de mesmo nome, sem que seja derivado de outro (e com args dif., é claro)?

15 Respostas

R

Cara os métodos possuem o mesmo nome, isso tem o nome de Polimorfismo, mais especificamente por Sobrecarga. Isso é:
Métodos com mesmo nome, mas com assinaturas diferentes, ou seja, variando no número e tipo de argumentos e no valor de retorno. De acordo com o número e tipos de argumentos que vc passa o compilador escolhe qual método usar. Da uma lida


N

Certo! Estava achando que era herança múltipla, mas na verdade é polimorfismo e sobrecarga.

Eu vi um exemplo parecido. Onde temos a área de um polígono. Então criamos um método abstrato para a área e para o perímetro. Depois cria-se classes como quadrado ou trapézio, por exemplo. Nestas classes deve-se implementar os métodos area() e perimetro() com seus respectivos cálculos.

R

Esse exemplo que deu também é de polimorfismo, porem por Sobreposição ou Override.

N

Quando eu vi o exemplo por Override não havia argumentos.
Vê se meu raciocínio está correto:
Se deixar o método abstrato sem argumentos, então é um polimorfismo por override, ou seja, posso implementar o método da maneira que eu queira. (mantendo o nome do método claro).
Se eu definir os argumentos do método abstrato, então é um polimorfismo, onde eu devo seguir a mesma semântica, ou seja, copiar a estrutura exatamente como está e só então implementar.
:?:

R

Sempre que um método for abstrato vc faz polimorfismo por override que significa sobreposição ou sobreescrita, ou seja vc reescreve o método com mesma assinatura (mesmo nome e mesmo argumentos), quando vc mantém o nome e muda os argumentos é Overload (SobreCarga).
Por exemplo quando vc sobreescreve o método public String toString(), vc está fazendo um override desse método, está reescrevendo ele novamente, mesmo ele não sendo abstrato. Se vc cria o método public String toString(Double valor) vc está fazendo um Overload, esta criando uma outra forma de chamar o método.

N

Vamos ver se digeri bem, a informação, segue abaixo tudo que entendi:

Assinatura
Como identificamos métodos polimórficos pelo seu nome, argumento e retorno, chamamos estes elementos dê assinatura, pois são através desses elementos que identificamos o método exato.

Override (sobreposição ou sobreescrita)
É quando estamos reescrevendo um método, sendo ele abstrato ou não, porém com a mesma assinatura. Estamos fazendo polimorfismo por override, porque não alteramos sua assinatura.

Overload (sobrecarga)
É quando mantemos o nome, porém mudamos, argumentos e/ou retorno. Isto cria um novo método, portanto é uma nova forma, consequentemente uma nova assinatura que será usada pelo compilador para chamar este método.
Então este é o polimorfismo por overload.

Por favor, me corrija caso eu não tenha entendido algo ou esteja faltando alguma coisa.

R

Se vc mudar o retorno mas mater o mesmo nome e atributos no java da erro, não é polimorfismo

J

Está certo sim, só o conceito de polimorfismo que não se encaixa nessas definições aí, polimorfismo é a capacidade de usar uma variavel de uma superclasse para referenciar um objeto da subclasse.

Ex.:

public class Carro {

}

public class Ferrari extends Carro {

}
Carro car = new Ferrari();
No exemplo acima estou usando uma variavel do tipo Carro para referenciar um objeto do tipo Ferrari, a isso damos o nome de polimorfismo.

http://pt.wikipedia.org/wiki/Polimorfismo

R
jairelton:
Está certo sim, só o conceito de polimorfismo que não se encaixa nessas definições aí, polimorfismo é a capacidade de usar uma variavel de uma superclasse para referenciar um objeto da subclasse.

Ex.:

public class Carro {

}

public class Ferrari extends Carro {

}
Carro car = new Ferrari();
No exemplo acima estou usando uma variavel do tipo Carro para referenciar um objeto do tipo Ferrari, a isso damos o nome de polimorfismo.

http://pt.wikipedia.org/wiki/Polimorfismo

Cara isso é um dos tipos de polimorfismo, conhecido como variável polimorfica, SobreEscrita e SobreCarga também são polimorfismo, se bem que alguns não consideram SobreCarga como polimorfismo, mas SobreEscrita sempre consideram.

N

Depois do que você disse, eu fiquei em dúvida:
O retorno faz parte da assinatura?

R

Em Java Assinatura é o nome do método mais seus parametros. Retorno não faz parte da assinatura do método

N

Certo. Vamos ver se agora vai:

retorno não faz parte da assinatura.

Em termos de método eu tenho:

  • polimorfismo por override;
  • polimorfismo por overload.
    Existe uma polêmica no polimorfismo por overload, alguns afirmam que overload não é polimorfismo, outros afirmam que sim.

Em termos de classe eu tenho:

  • variável polimórfica.
    Uma classe que chamaremos aqui de superclasse (tipo de variável objeto) que na sua implementação pode utilizar extends para outras classes que chamaremos de subclasses.
    Então cria-se um objeto superclasse e através da palavra-chave new, é possível se referenciar a uma classe (subclasse) dentre as demais subclasses.
    Sintaxe:
    <nome da variável> = new ;
    A isto, damos o nome de variável polimórfica.

Novamente, peço a ajuda dos caros colegas. Me corrijam se eu entendi algo errado.

R

Ao inves de utilizar uma superclasse vc pode utilizar uma interface também
por Exemplo:

List lista = new ArrayList();

List é uma Interface

N

Entre interface e superclasse, algum deles é deprecated, ou seja, está em desuso?

R

deprecated é algum método utilizado em versões anteriores do java que foram substituidos por outros em versões mais atuais.

Criado 12 de abril de 2008
Ultima resposta 14 de abr. de 2008
Respostas 15
Participantes 3