Aqui está o código que desenvolvi seguindo as orientações do exercício. Acredito que cobri todos os pontos, mas se tiverem sugestões de melhoria, ficarei feliz em ouvir!
void main(List<String> arguments) {
Mamifero mamifero1 = Mamifero("Cachorro", 20, "Branco", 2);
Ave ave1 = Ave("Urubu", 2, "Preto", "Longo");
Peixe peixe1 = Peixe("Peixe-Lua", 2000, "Acizentado", "Salgada");
mamifero1.mover();
ave1.mover();
peixe1.mover();
mamifero1.alimentacao();
ave1.alimentacao();
peixe1.alimentacao();
mamifero1.emitirSom();
ave1.emitirSom();
peixe1.emitirSom();
}
class Animal implements Comportamentos {
String nome;
double peso;
String cor;
Animal(this.nome, this.peso, this.cor);
void printAnimal() {
print("O animal $nome é $cor e pesa $peso kg");
}
@override
void mover() {
print("O animal $nome já está há 10 metros de você");
}
@override
void alimentacao() {
print("O animal $nome está comendo");
}
@override
void emitirSom() {}
}
class Mamifero extends Animal {
int tempoDeGestacao;
Mamifero(String nome, double peso, String cor, this.tempoDeGestacao)
: super(nome, peso, cor);
void gestacaoInfo() {
print(
"O mamífero $nome tem um tempo de gestação de $tempoDeGestacao meses");
}
@override
void mover() {
print("Começou a andar");
super.mover();
}
@override
void emitirSom() {
print("Vocalizando...");
}
}
class Ave extends Animal {
String tipoDeBico;
Ave(String nome, double peso, String cor, this.tipoDeBico)
: super(nome, peso, cor);
void bicarArvore() {
print("A ave $nome está bicando a árvore com seu bico $tipoDeBico");
}
@override
void mover() {
print("Começou a voar");
super.mover();
}
@override
void emitirSom() {
print("Cantando...");
}
}
class Peixe extends Animal {
String tipoDeAgua;
Peixe(String nome, double peso, String cor, this.tipoDeAgua)
: super(nome, peso, cor);
void nadando() {
print("O peixe $nome está nadando na água $tipoDeAgua");
}
@override
void mover() {
print("Começou a nadar");
super.mover();
}
@override
void emitirSom() {
print("Sem som...");
}
}
abstract class Comportamentos {
void mover();
void alimentacao();
void emitirSom();
}
Terminal: