Olá, sou novo aqui no fórum, assim como em Java.
Estou com uma duvida sobre um método do qual eu passo como parâmetro o nome do atributo que quero modificar e o novo valor. O nome do atributo é String mas o novo valor pode ser String, double ou int.
public class Teste {
private String nome;
private String corOlhos;`
private int quantidade;
private double preco;
public Test(String nome, int quantidade, double preco, String corOlhos){
this.nome = nome;
this.quantidade = quantidade;
this.preco = preco;
this.corOlhos = corOlhos;
}
public void setAtributo(String atributo, X valor) {
}
}
Eu pensei em fazer com switch, receber ambos como String e converter dependendo de qual case, mas queria saber se existe uma maneira mais “bonita”, porque a minha classe tem cerca de 11 atributos, e fazer 11 case’s não é tão legal e também tem a questão de quando são 2 ou mais atributos de mesmo tipo, como o nome e a corOlhos ambos String.
Obrigado desde já.
Uma classe java jamais permitirá que você tenha dois atributos com mesmo nome, independente de seu tipo. Você nunca verá isso:
public class Exemplo{ int x; String x;//Só um atributo pode ter nome x }
Já com métodos, a história é um pouco diferente.
Você pode ter métodos com mesmo nome e até mesmo com mesmo tipo de retorno, DESDE QUE jamais tenha a mesma assinatura. Como assim?
Veja o que não pode:
public class ExemploNaoPode{ public void metodo(){} public int metodo(){}//Qual dos dois a JVM vai chamar quando precisar? }
Outro exemplo:
public class ExemploNaoPode2{ public String saudacao(String nome) {} public void saudacao(String nome){}//Mesma coisa, qual chamar? }
Agora, você pode sobrecarregar métodos.
Isto é, pode criar métodos com mesmo nome, tipo de retorno igual ou diferente, mas com assinaturas distintas:
public class Sobrecarga{ public String saudacao(String nome){ return "Olá, " + nome;} public void saudacao(String nome, String msg) { System.out.println(msg + nome); } }
Note que, na classe Sobrecarga, você tem dois métodos com mesmo nome (saudacao), porém, cada um recebe um número distinto de parâmetros. Isso é sobrecarga.
Outro exemplo:
public class Sobrecarga2{ public void teste(String nome, int valor){} public void teste(String nome, String valor){} }
Perceba que a classe Sobrecarga2 tem 2 métodos com mesmo nome (teste) e com mesmo número de parâmetros (2). O que os difere é o tipo dos parâmetros.
Entendeu?
A sobrecarga de métodos permite que existam métodos com mesmo nome, desde que possuam parâmetros diferentes em número ou em tipo (isso também se aplica à ordem dos parâmetros).
Lógico que você pode receber tudo em um único método que aceite duas String, mas vai de ti fazer desta ou daquela forma.
2 curtidas
Sobrecarga e Sobrescrita são assuntos de arrancar os cabelos no começo, mas logo tudo fica mais claro. Funciona bem como o @drsmachado falou: sobrecarga acontece quando você escreve um método com mesmo nome, mas com parâmetros diferentes. Vou deixar aqui duas perguntas interessantes a respeito de sobrecarga, para que você dê uma pesquisada (se quiser).
-
class A {
void A(String... params) {
System.out.println("varargs");
}
void A(String params) {
System.out.println("Single arg");
}
public static void main(String[] args) {
new A().A("Hello");
}
}
Compila? Se compila, imprime o que?
-
class Pai {
static int A = 0;
}
class A extends Pai {
A() {
}
static int A = 1;
void A(String str) {
System.out.println("str");
}
void A(Object obj) {
System.out.println("obj");
}
public static void main(String[] args) {
Object str = "oi";
new A().A(str);
System.out.println(new A().A);
System.out.println(((Pai) new A()).A);
}
}
Compila? Se compila, imprime o que?
1 curtida