[RESOLVIDO] Java Polimorfismo

Galera, já tendo as fórmulas em mãos, como eu posso colocar métodos que calculam a diagonal do quadrado e do retângulo na classe Diagonal que é uma interface??

public abstract class Poligono extends Figura {
	private int base;
	private int altura;
	
	public Poligono(int base, int altura) {
		this.base = base;
		this.altura = altura;
		
	}
	
	@Override
	public double area() {
		
		return 0;
	}
	public int getBase() {
		return base;
	}
	public void setBase(int base) {
		this.base = base;
	}
	public int getAltura() {
		return altura;
	}
	public void setAltura(int altura) {
		this.altura = altura;
	}
	public abstract int base();
	public abstract int altura();
}


 

`public class Quadrado extends Poligono {`
	public Quadrado(int altura, int base) {
		super(altura, base);
		
	}
	
	
	@Override
	public int base() {
		
		return 0;
	}

	@Override
	public int altura() {
		
		return 0;
	}

}



public interface Diagonal {
	static double dSquare = 0;
	static double dRecta = 0;
	
		
		
	}

Você não vai colocar na interface Diagonal. Você vai implementar essa interface nas classes Quadrado e Retangulo e, a partir daí, vai fazer com que cada uma dessas classes implemente de modo específico as funcionalidades definidas na interface Diagonal.

1 curtida

e. Os polígonos Retangulo e Quadrado devem implementar a interface Diagonal,
que deve ter um método que calcula a diagonal.

Está desta forma no exercício, pede para que eu faça o método que calcula a diagonal na Interface Diagonal, só não entendi como vou fazer isso direto na Interface diagonal… ficou mais claro??

Você deve criar um método na interface Diagonal e deixar a implementação nas classes que implementam essa interface.

Ex:

public interface MinhaInterface {

    public void calcular();
}
public class MinhaClasse implements MinhaInterface {
    public void calcular() {
        //Implementação aqui
    }
}

EDIT:
Depois que você fazer isso a gente passa para a implementação do Polimorfismo

Ficou assim pessoal:

`public interface Diagonal {`

    	public double calcularDiag();

    }

public class Quadrado extends Poligono implements Diagonal {

	public Quadrado(double altura, double base) {
		super(altura, base);

	}

	@Override
	public double area() {

		return 0;
	}

	@Override
	public double base() {

		return 0;
	}

	@Override
	public double altura() {

		return 0;
	}

	@Override
	public double calcularDiag() {
		return (Math.sqrt(2)) * this.getAltura();

	}

}



public class Retangulo extends Poligono implements Diagonal {

	public Retangulo(double altura, double base) {
		super(altura, base);

	}

	@Override
	public double base() {

		return 0;
	}

	@Override
	public double altura() {

		return 0;
	}

	@Override
	public double calcularDiag() {

		return ((Math.pow(this.altura(), 2) + Math.pow(this.base(), 2)) * 0.5);
	}

}

Muito bom! Eu só acho que você pode tirar esses métodos: altura() e base()
Agora as classes Quadrado e Retangulo tem as suas proprias formulas para calcular a diagonal.

Vamos ao conceito de polimorfismo.

Polimorfismo é nada mais nada menos que, um objeto ter várias formas, como assim?

Exemplo:

public interface Impressora{
    public void imprimir();
}

public class ImpressoraZebra implements Impressora {
    public void imprimir() {
        System.out.println("Imprimindo pela Zebra");
    }
}

public class ImpressoraTérmica implements Impressora{
  public void imprimir() {
        System.out.println("Imprimindo pela Térmica");
    }
}

Nosso sistema utiliza duas impressoras como pode ver acima, a Zebra e a Térmica.
Ao invés de termos um método para cada tipo de impressora no nosso serviço, podemos utilizar o polimorfismo e com isso executar a impressão de qualquer impressora

public void imprimir(Impressora impressora) {
    impressora.imprimir();
}
ImpressoraZebra impressora = new ImpressoraZebra();
//ImpressoraTermica impressora = new ImpressoraTermica();

imprimir(impressora);

As várias formas que eu citei anteriormente, esta no parâmetro, pois como a nossa Impressora Zebra ou a Térmica implementa Impressora, ela se comporta como uma Impressora e com isso podemos passa-la em qualquer lugar que precisa de uma Impressora.

Agora tente aplicar as mesmas técnicas, só que para as suas classes

É possível fazer isso com classes herdadas também, ao invés de só interfaces

EDIT: Talvez utilizar a impressora como interface não tenha sido a melhor coisa a se fazer, mas o fundamento é o mesmo

Perfeito cara, obrigado pelo tempo e dedicação de me explicar, pode ter certeza que peguei o conceito agora.
Tá quase pronto aqui, só vou fazer um ArrayList e terminar o exercício, muuuuito obrigado mano, sucessooo!

Magina, qualquer coisa só abrir um novo tópico :+1:

Abraços