Vamos explorar a implementação prática dos conceitos solicitados:
1. Classe Carro e ModeloCarro
// Classe base
public class Carro {
private String modelo;
private double[] precos = new double[3];
public void setModelo(String modelo) {
this.modelo = modelo;
}
public void setPrecos(double ano1, double ano2, double ano3) {
precos[0] = ano1;
precos[1] = ano2;
precos[2] = ano3;
}
public void calcularExibirMenorMaiorPreco() {
double menor = precos[0];
double maior = precos[0];
for (double preco : precos) {
if (preco < menor) menor = preco;
if (preco > maior) maior = preco;
}
System.out.println("Modelo: " + modelo);
System.out.println("Menor preço: " + menor);
System.out.println("Maior preço: " + maior);
}
}
// Subclasse
public class ModeloCarro extends Carro {
// Herda toda a funcionalidade da classe Carro
}
// Uso
public class Principal {
public static void main(String[] args) {
ModeloCarro fusca = new ModeloCarro();
fusca.setModelo("Fusca");
fusca.setPrecos(20000, 21000, 19000);
fusca.calcularExibirMenorMaiorPreco();
}
}
2. Classe Animal com Cachorro e Gato
// Classe base
public class Animal {
public void emitirSom() {
System.out.println("Som genérico");
}
}
// Subclasses
public class Cachorro extends Animal {
@Override
public void emitirSom() {
System.out.println("Au Au!");
}
public void abanarRabo() {
System.out.println("Abanando o rabo!");
}
}
public class Gato extends Animal {
@Override
public void emitirSom() {
System.out.println("Miau!");
}
public void arranharMoveis() {
System.out.println("Arranhando móveis!");
}
}
// Uso
public class Principal {
public static void main(String[] args) {
Animal animal1 = new Cachorro();
Animal animal2 = new Gato();
animal1.emitirSom(); // Au Au!
animal2.emitirSom(); // Miau!
((Cachorro) animal1).abanarRabo();
((Gato) animal2).arranharMoveis();
}
}
3. Conta Bancária e Conta Corrente
// Classe base
public class ContaBancaria {
protected double saldo;
public void depositar(double valor) {
if (valor > 0) saldo += valor;
}
public void sacar(double valor) {
if (valor <= saldo) saldo -= valor;
}
public double consultarSaldo() {
return saldo;
}
}
// Subclasse
public class ContaCorrente extends ContaBancaria {
public void cobrarTarifaMensal() {
saldo -= 25.0; // Tarifa fixa
}
}
// Uso
public class Principal {
public static void main(String[] args) {
ContaCorrente conta = new ContaCorrente();
conta.depositar(1000);
conta.cobrarTarifaMensal();
System.out.println("Saldo: " + conta.consultarSaldo());
}
}
4. Números Primos com Verificação e Geração
// Classe base
public class NumerosPrimos {
public boolean verificarPrimalidade(int numero) {
if (numero <= 1) return false;
for (int i = 2; i <= Math.sqrt(numero); i++) {
if (numero % i == 0) return false;
}
return true;
}
public void listarPrimos(int limite) {
for (int i = 2; i <= limite; i++) {
if (verificarPrimalidade(i)) System.out.print(i + " ");
}
}
}
// Subclasses
public class VerificadorPrimo extends NumerosPrimos {
public void verificarSeEhPrimo(int numero) {
if (verificarPrimalidade(numero)) {
System.out.println(numero + " é primo!");
} else {
System.out.println(numero + " não é primo!");
}
}
}
public class GeradorPrimo extends NumerosPrimos {
public int gerarProximoPrimo(int ultimoPrimoConhecido) {
int proximo = ultimoPrimoConhecido + 1;
while (!verificarPrimalidade(proximo)) proximo++;
return proximo;
}
}
// Uso
public class Principal {
public static void main(String[] args) {
VerificadorPrimo verificador = new VerificadorPrimo();
verificador.verificarSeEhPrimo(17);
GeradorPrimo gerador = new GeradorPrimo();
System.out.println("Próximo primo: " + gerador.gerarProximoPrimo(17));
}
}