1
resposta

Desafio Interface Forma

// INTERFACE

package br.alura.interfaces;

public interface Forma {
    public double calcularArea();
}


// SUPERCLASSE 

package br.alura.modelo;

public class Geometria {

    protected String forma;
    protected double altura;
    protected double largura;

    public Geometria(String forma, double altura, double largura) {
        this.altura = altura;
        this.largura = largura;
        this.forma = forma;

    }

    public double getAltura() {
        return altura;
    }

    public double getLargura() {
        return largura;
    }

    public String getForma() {
        return forma;
    }

    @Override
    public String toString() {
        return "Geometria{" +
                "forma='" + forma + '\'' +
                ", altura=" + altura +
                ", largura=" + largura +
                '}';
    }
}

// SUBCLASSES

package br.alura.modelo;

import br.alura.interfaces.Forma;

public class Circulo extends Geometria implements Forma {


    public Circulo(String forma, double altura, double largura) {
        super(forma, altura, largura);
    }

    @Override
    public double calcularArea() {
        return 2 * (this.altura + this.largura);
    }
}


package br.alura.modelo;

import br.alura.interfaces.Forma;

public class Quadrado extends Geometria implements Forma {

    public Quadrado(String forma, double altura, double largura) {
        super(forma, altura, largura);
    }

    @Override
    public double calcularArea() {
        return this.altura * this.largura;
    }
}



// MAIN

import br.alura.interfaces.Forma;
import br.alura.modelo.Circulo;
import br.alura.modelo.Quadrado;

import java.util.ArrayList;

public static void main(String[] args) {

    ArrayList<Forma> formas = new ArrayList<>();

    Circulo forma1 = new Circulo( "circulo", 12, 3);
    formas.add(forma1);
    Circulo forma2 = new Circulo( "palco",4.5, 6.2);
    formas.add(forma2);
    Circulo forma3 = new Circulo("bola",0.50,0.50);
    formas.add(forma3);

    Quadrado forma4 = new Quadrado("cubo",2,2);
    formas.add(forma4);
    Quadrado forma5 = new Quadrado("piso",0.5,0.5);
    formas.add(forma5);
    Quadrado forma6 = new Quadrado( "quadro",10,10);
    formas.add(forma6);

    for(Forma item: formas){
            if(item instanceof Circulo circulo){
                System.out.printf("Area do %s\n",circulo.getForma().toUpperCase());
                System.out.println(item.calcularArea());

            }else if(item instanceof Quadrado quadrado){
                System.out.printf("Area do %s\n",quadrado.getForma().toUpperCase());
                System.out.println( item.calcularArea());
            }

    }



}
1 resposta

Oi, Enio! Tudo bem?

Ótimo código, parabéns pela sua elaboração! Deixo como sugestão apenas uma modificação no método calcularArea() da classe Circulo para seguir a lógica para calcular a área de um círculo: ( \pi \times \text{raio}^2 ). Deixando, assim, o nosso código da seguinte forma:

@Override
public double calcularArea() {
    double raio = this.altura / 2; // Supondo que altura seja o diâmetro
    return Math.PI * Math.pow(raio, 2);
}

Podemos também nesse caso alterar as variáveis altura e largura para o círculo, para raio ou diâmetro.

Espero ter ajudado!

Um forte abraço e bons estudos!