Classe Abstracta ..ajuda!

Boa Noite pessoal :slight_smile:

Estou aqui a meio de um projecto e com problemas na implementação de umas subclasses de uma classe abstracta. Aqui vai a descrição da situação:

O UML ( é mais complexo que isto, mas só esta parte me interessa ) :

A Questão:

Quero defenir a classe Conteudo como abstracta com o método retornaValor() de modo à classe Celula poder aceder a conteudos do tipo Numero Frase e Formula. O meu primeiro passo foi declarar a classe Conteudo como abstracta e as outras 3 como subclasses de Conteudo:

public abstract class Conteudo 
{
	public abstract ??? retornaValor();
}

O meu problema, é que tipo de dado eu meto como retorno no método retornaValor() das subclasses? Eu tenho deta maneira, pois no meu ver o retorno deveria ser do tipo Conteudo, para depois na Celula com o getConteudo conseguir aceder:

exemplo de uma das subclasses:

public class Numero extends Conteudo{

            private int inteiro;
            
            private double flut;
            
			public Numero()	{
				inteiro=0;
				flut=0;
			}
			
			public Numero(int i){
				inteiro=i;
				flut=0;
			}
			
			public Numero(double f){
				inteiro=0;
				flut=f;
			}
			
			public int getInteiro()	{
				return inteiro;
			}
			
			public void setInteiro(int i){
				inteiro=i;
			}
			
			public double getFlut()	{
				return flut;
			}
			
			public void setFlut(double f){
				flut=f;
			}


			public Conteudo retornaValor(){
    				Numero n = new Numero();
    				return(n);
    		        }
}

Agora penso que esse método está errado, pois nas classes de teste que exprimentei devolve sempre um resultado esquesito :frowning: :frowning: :frowning:

Exemplo da classe teste:

public class testes {

    public static void main(String[] args){
    
	Conteudo c2 = new Numero(3);
	Conteudo c3 = new Numero(5.3);
	Celula cel2 = new Celula (2,4);
	Celula cel3 = new Celula (1,3);
	cel2.setConteudo(c2);
	cel3.setConteudo(c3);
	System.out.println("Conteudo da celula 2:"+cel2.getConteudo());
	System.out.println("Conteudo da celula 3:"+cel3.getConteudo());
	    
    }
    
    
}

O resultado que dá disto tudo são coisas tipo:

Conteudo da celula 2:Numero@f5da06
Conteudo da celula 3:Numero@bd0108

…e não os valores que defeni :S

Que estou fazendo mal ? minha sugestão é a redefinição do método retornaValor() nas subclasses, mas não consigo fazer de outra maneira :frowning:

Agradecia a ajuda, e lamento MUITO o tamanho deste post.Tentei ser o mais descritivo possivel.

Obrigadão

implemente o método toString() na classe número que seu código vai dar certo…
exemplo:

public String toString() { return Integer.toString(this.inteiro); }

Isso não transforma o inteiro numa String ? é que o valor depois vai ser usado para cálculos

usa o parseInt() da class Integer pra retorna pra inteiro

String a = "10";
int b = Integer.parseInt(a);

é isso?