2
respostas

Desafio 3 - Reaproveitando características e comportamentos

1 - Crie uma classe Carro com métodos para representar um modelo específico ao longo de três anos. Implemente métodos para definir o nome do modelo, os preços médios para cada ano, e calcular e exibir o menor e o maior preço. Adicione uma subclasse ModeloCarro para criar instâncias específicas, utilizando-a na classe principal para definir preços e mostrar informações.

package desafios.carro;

public abstract class Carro {
    private String modelo;
    private double precoAno1;
    private double precoAno2;
    private double precoAno3;

    public void setDefinirModelo(String modelo) {
        this.modelo = modelo;
    }

    public void setDefinirPrecos(double precoAno1, double precoAno2, double precoAno3) {
        this.precoAno1 = precoAno1;
        this.precoAno2 = precoAno2;
        this.precoAno3 = precoAno3;
    }

    private double calcularMenorPreco() {
        double menorPreco = precoAno1;

        if (precoAno2 < precoAno1) {
            menorPreco = precoAno2;
        }

        if (precoAno3 < precoAno2) {
            menorPreco = precoAno3;
        }

        return menorPreco;
    }

    public void exibirInfo() {
        System.out.println("Modelo: " + modelo);
        System.out.printf("Menor preço: %.2f\n", calcularMenorPreco());
    }
}
package desafios.carro;

public class ModeloCarro extends Carro {
    private String cor;
    private String tipoMotor;

    public void setCor(String cor) {
        this.cor = cor;
    }

    public void setTipoMotor(String tipoMotor) {
        this.tipoMotor = tipoMotor;
    }

    @Override
    public void exibirInfo() {
        super.exibirInfo();
        System.out.println("Cor: " + cor);
        System.out.println("Tipo do Motor: " + tipoMotor);
    }
}
package desafios.carro;

public class TesteCarros {
    public static void main(String[] args) {
        ModeloCarro carro = new ModeloCarro();
        carro.setDefinirModelo("Sedan");
        carro.setDefinirPrecos(30000, 32000, 35000);
        carro.setCor("Preto");
        carro.setTipoMotor("3.5 V6");
        carro.exibirInfo();
    }
}

2 - Crie uma classe Animal com um método emitirSom(). Em seguida, crie duas subclasses: Cachorro e Gato, que herdam da classe Animal. Adicione o método emitirSom() nas subclasses, utilizando a anotação @Override para indicar que estão sobrescrevendo o método. Além disso, adicione métodos específicos para cada subclasse, como abanarRabo() para o Cachorro e arranharMoveis() para o Gato.

package desafios.animal;

public class Animal {
    public void emitirSom() {
        System.out.println("Emitindo som");
    }
}
package desafios.animal;

public class Cachorro extends Animal {
    @Override
    public void emitirSom() {
        System.out.println("Au au au");
    }

    public void abanarRabo() {
        System.out.println("Abanando rabo");
    }
}
package desafios.animal;

public class Gato extends Animal {
    @Override
    public void emitirSom() {
        System.out.println("Miau Miau Miau");
    }

    public void arranharMoveis() {
        System.out.println("Arranhando móveis");
    }
}
package desafios.animal;

public class TesteAnimais {
    public static void main(String[] args) {
        Gato laranjinha = new Gato();
        laranjinha.emitirSom();
        laranjinha.arranharMoveis();

        Cachorro caramelo = new Cachorro();
        caramelo.emitirSom();
        caramelo.abanarRabo();
    }
}
2 respostas

3 - Crie uma classe ContaBancaria com métodos para realizar operações bancárias como depositar(), sacar() e consultarSaldo(). Em seguida, crie uma subclasse ContaCorrente que herda da classe ContaBancaria. Adicione um método específico para a subclasse, como cobrarTarifaMensal(), que desconta uma tarifa mensal da conta corrente.

package desafios.conta;

public class ContaBancaria {
    protected double saldo;

    public void ContaBancaria(double saldo) {
        this.saldo = saldo;
        consultarSaldo();
    }

    public void consultarSaldo() {
        System.out.println("Saldo atual: R$ " + saldo);
    }

    public void sacar(double valor) {
        if (valor > 0 && valor <= saldo) {
            saldo -= valor;
            consultarSaldo();
        } else {
            System.out.println("Valor insuficiente");
        }
    }

    public void depositar(double valor) {
        if (valor > 0) {
            saldo += valor;
            consultarSaldo();
        }
    }
}
package desafios.conta;

public class ContaCorrente extends ContaBancaria {
    private double tarifaMensal;

    public void cobrarTarifaMensal(double tarifaMensal) {
        this.tarifaMensal = tarifaMensal;
        saldo -= tarifaMensal;
        consultarSaldo();
    }
}
package desafios.conta;

public class TesteConta {
    public static void main(String[] args) {
        ContaBancaria conta = new ContaBancaria();
        conta.ContaBancaria(5000);
        conta.depositar(80);
        conta.sacar(5100);

        ContaCorrente contaCorrente = new ContaCorrente();
        contaCorrente.consultarSaldo();
        contaCorrente.depositar(600);
        contaCorrente.cobrarTarifaMensal(0.08);
        contaCorrente.sacar(200);
    }
}

4 - Crie uma classe NumerosPrimos com métodos como verificarPrimalidade() e listarPrimos(). Em seguida, crie duas subclasses, VerificadorPrimo e GeradorPrimo, que herdam da classe NumerosPrimos. Adicione um método específico para cada uma das subclasses, como verificarSeEhPrimo() para o VerificadorPrimo e gerarProximoPrimo() para o GeradorPrimo.

package desafios.primos;

public class NumerosPrimos {
    public boolean verificarPrimalidade(int numero) {
        if (numero <= 1) {
            return false;
        }

        for (int i = 2; i * i <= numero; i++) {
            if (numero % i == 0) {
                return false;
            }
        }

        return true;
    }

    public void listarPrimos(int limiteSuperior) {
        System.out.println("Números primos até " + limiteSuperior + ": ");
        for (int i = 2; i <= limiteSuperior; i++) {
            if (verificarPrimalidade(i)) {
                System.out.print(i + " ");
            }
        }
        System.out.println();
    }
}
package desafios.primos;

public class VerificadorPrimo extends NumerosPrimos{
    public void verificarPrimo(int numero) {
        if (verificarPrimalidade(numero)) {
            System.out.println(numero + " é primo");
        } else {
            System.out.println(numero + " não é primo");
        }
    }
}
package desafios.primos;

public class GeradorPrimo extends NumerosPrimos {
    public int gerarProximoPrimo(int ultimoPrimo) {
        int proximoNumero = ultimoPrimo + 1;

        while(!verificarPrimalidade(proximoNumero)) {
            proximoNumero++;
        }

        return proximoNumero;
    }
}
package desafios.primos;

public class TesteNumerosPrimos {
    public static void main(String[] args) {
        VerificadorPrimo verificador = new VerificadorPrimo();
        verificador.verificarPrimo(21);

        GeradorPrimo gerador = new GeradorPrimo();
        int proximoPrimo = gerador.gerarProximoPrimo(21);
        System.out.println("O próximo primo após 21 é " + proximoPrimo);

        NumerosPrimos numerosPrimos = new NumerosPrimos();
        numerosPrimos.listarPrimos(19);
    }
}

Oi, Gabrielly! Como vai?

Obrigada por compartilhar seu código com a comunidade Alura.

Gostei de como você organizou as classes e métodos para reaproveitar o comportamento com herança. Você seguiu a estrutura do desafio com precisão, especialmente ao sobrescrever o método emitirSom para adaptar cada subclasse. Parabéns!

Conte com o apoio do Fórum na sua jornada. Abraços e bons estudos!