Sobrecarga como faser?

boa tarde , como faço para indicar para o o usuario inserir numeros aleatorio double ou float ou inteiro e a aplicaçao indetificar e usar os metodos que foram cirados ?

eu usei todos double porem se for inseridos 2 numero inteiros o retorno e um double q e logico , porem a minha duvida e como faser a aplicação saber ser for inserido 2+2=4 ou 1.5 +2 = 3.5 …


package br.com.projecao.listasOOexe03;
/*
 * Crie uma classe uma Classe chamada MetodosSobrecarregados , 
 * nesta classe deve conter métodos 
 * para somar inteiros, double, float e String;
 * 
 * */
public class MetodosSobrecarregados {

	public int soma(int x, int y) {
		//polimorfismo por sobrecarga (parametro tem o tipo na esquerda INT)

		return x + y;
	}
	
	public double soma ( double x, double y){
		
		return x+y;
		
		
	}
	 public float soma(float x , float y ){
		 
		 
		 return x+y;

		 
	 }
	
	public String  palavras (String a, String b){
		
		return "foi digitado "+a+" e "+b;
		
		
	}
	
	
	
	
	
}
criacao dos metodos 
package br.com.projecao.listasOOexe03;

import javax.swing.JOptionPane;

public class TesteMetodosSobrecarregados extends MetodosSobrecarregados{

	/**
	 * uma segunda classe chamada TesteMetodosSobrecarregados com o método main.
	 * b. O usuário irá definir o que ele quer somar, portanto crie uma rotina
	 * onde o usuário informará qual será soma e exiba o resultado ao final da
	 * rotina;
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		/*
		double n1=Double.parseDouble(JOptionPane.showInputDialog("Digite um numero com o sem casas decimais"));
		double n2=Double.parseDouble(JOptionPane.showInputDialog("Digite outro numero com o sem casas decimais"));
	
		MetodosSobrecarregados m= new MetodosSobrecarregados();
		
		System.out.println(m.soma(n1,n2));
	*/

	
	int op =Integer.parseInt(JOptionPane.showInputDialog(null, "digite a opção \n 1- para lidar com soma numerica \n 2- para lidar com caracteres "));
	
	switch (op){
	
	case 1:{
		double n1=Double.parseDouble(JOptionPane.showInputDialog("Digite um numero com o sem casas decimais"));
		double n2=Double.parseDouble(JOptionPane.showInputDialog("Digite outro numero com o sem casas decimais"));
		
		MetodosSobrecarregados m= new MetodosSobrecarregados();
		
		System.out.println(m.soma(n1,n2));
		 break;
	}
	case 2:{
		
		String n1=JOptionPane.showInputDialog("digite a letra ou palavra ");
		String n2=JOptionPane.showInputDialog("digite outra letra ou palavra");
		MetodosSobrecarregados m= new MetodosSobrecarregados();
		System.out.println(m.palavras(n1,n2));
		
		break;
		
		
	}
	
	default: {JOptionPane.showMessageDialog(null,"escolhas uma das opções ");
	break;}
	
	
	
	
	}
	}

}

execuçao

Cara, a partir dos tipos de dados que você está passando por parâmetro para o método, a JVM decide qual método chamar, se você passar 2 inteiros, vai chamar o método soma cujo mesmo recebe 2 inteiros como parâmetro. O método showInputDialog retorna texto, você é quem deve fazer o tratamento para int, float, double etc…

A propósito não vejo porque ter um método que recebe um float e outro recebe um double, faça apenas um que recebe ou um float ou um double e pronto!

Por favor, não poste os títulos dos tópicos usando apenas LETRAS MAIÚSCULAS.

Não tem porque tentar chamar mais atenção que os demais.

como vou estipular o tipo , da da variavel , pois o usuario q vai inserir os numeros , para ele inserir tenho q ter uma variavel que receba o numeros inserido , e para criar a variavel q receba o numero incerido tenho q estabelecer um tipo correto?

sendo q eu estou usando 2 numeros ? e tenho 3 tipos tipos para receber o numero ?

:?:

como faser para que o usuario insira numeros aleatorio tipo double ou int ou float e a aplicacacao faser a soma dos respectivos valores atraves do metodo de sobrecarga?