Polimorfismo [ Resolvido ]

5 respostas
L

Srs, boa tarde!

Estou estudando a melhor forma de programar usando as regras de ( Polimorfismo ). A seguir temos dois códigos, eles fazem exatamente as mesma coisa. Eu procurei seguir dois caminhos e gostaria de saber entre eles qual segue os conceitos principais de Polimorfismo.

Primeiro:

public class OperacaoMat extends Object
{
	public double calcular( double x, double y )
	{
		return 0;
	}
	
	//Sobrescreve o método toString da Classe Object
	@Override 
	public String toString()
	{
		return String.format("%s:%f");			
	}	
}
public class Soma extends OperacaoMat
{
	double soma=0;
	
	//Sobrescreve o método Calcular da classe OperacaoMat
	@Override
	public double calcular( double x, double y )
	{
		soma = x + y;		
		return  soma;
	}
	
	//Sobrescreve o método toString da Classe OperacaoMat
	@Override 
	public String toString()
	{
		return String.format( "%s: %f", 
			"Resultado da Soma:", soma );			
	
	}//Fim do método toString
}
public class Multiplicacao extends OperacaoMat
{
	double multi=0;

	//Sobrescreve o método Calcular da classe OperacaoMat
	@Override
	public double calcular( double x, double y )
	{
		multi = x * y;
		
		return multi;
	}
	
	//Sobrescreve o método toString da Classe OperacaoMat
	@Override 
	public String toString()
	{
		return String.format( "%s: %f", 
			"Resultado da Multiplicação:", multi );			
	
	}//Fim do método toString	
	
}
public class Operacao_Main
{	
	public static void main( String[] args )
	{
		Soma opSoma = new Soma();
		Multiplicacao opMult = new Multiplicacao();
		
		opSoma.calcular( 5,5 );
		opMult.calcular( 5,5 );
		
		System.out.println( opSoma.toString() );
		System.out.println( opMult.toString() );		
		
	}		
}

Agora vamos para segunda opção***

public class OperacaoMat extends Object
{
	public double calcular( double x, double y )
	{
		return 0;
	}		
		
}
public class Soma extends OperacaoMat
{
		
	public double calcular( double x, double y )
	{
		return  x + y;	
	}	
	
}
public class Multiplicacao extends OperacaoMat
{
	public double calcular( double x, double y )
	{
		return x * y;
	}
}
public class Operacao_Main
{
	public static void calcule( OperacaoMat op, double x, double y )
	{
		System.out.println( op.calcular( x,y ) );
	}	
	
	public static void main( String[] args )
	{
		calcule( new Soma(), 5, 5 );
		calcule( new Multiplicacao(), 5, 5 );
		
	}		
}

5 Respostas

FernandoFranzini
L

Fernando, bom dia!

Muito obrigado pelo envio da documentação. Seu exemplo foi muito assertivo. Penso que também foi produtivo para conhecer o seu blog.

Tenho mais uma questão, quando usamos na prática o conceito de polimorfismo, é comum trabalhar com Sobrecarga de métodos?. Parecido com exemplo que você enviou.

//Define o comportamento para fabricar a pizza
public class Forno
{
	//Passos para fabricar uma pizza Calabreza
	public void fabricar( PizzaCalabreza pizza )
	{
		pizza.preparar();
		pizza.assar();
		pizza.cobrar();
	}
	
	//Passos para fabricar uma pizza Napolitana
	public void fabricar( PizzaNapolitana pizza )
	{
		pizza.preparar();
		pizza.assar();
		pizza.cobrar();
	}		
}
FernandoFranzini

Sim…use tudo da OOP!

Ataxexe

Só tome cuidado com a herança.

L

Srs, muito obrigado pela ajuda.

Criado 23 de julho de 2014
Ultima resposta 25 de jul. de 2014
Respostas 5
Participantes 3