3.4. Orientação à Objetos em Dart: Herança

Diego Dias
Flutter Brasil
Published in
2 min readDec 7, 2021

Herança é um dos pontos chave de programação orientada a objetos (POO). A ideia de herança é facilitar a programação. Uma classe A deve herdar de uma classe B quando podemos dizer que A é um B.

Lembre-se que em Dart, tudo é um objeto.

Vamos declarar duas classes, uma chamada cachorro e a outra gato, vamos atribuir duas variáveis aos dois: nome e peso:

class Cachorro {
String nome;
double peso;
}
class Gato {
String nome;
double peso;
}

Agora, vamos atribuir alguns métodos aos dois como “comer” e “fazer som”. Vamos diferenciar também a variável “fofura” para o cachorro e “está amigável” para o gato:

class Cachorro {
String nome;
double peso;
int fofoura;
void comer(){
print("$nome comeu");
}
void fazerSom(){
print("$nome fez dom!");
}
void brincar(){
fofura += 10;
print("fofura do $nome aumentou para $forura");
}
}
class Gato {
String nome;
double peso;
void comer(){
print("$nome comeu");
}
void fazerSom(){
print("$nome fez dom!");
}
void estaAmigavel(){
return true;
}
}

Perceba que em ambas as classes há atributos semelhantes. Aqui que entra a herança, vamos criar uma classe “Animal” com os atributos semelhantes entre o Gato e Cachorro e extender a classe Animal a ambos, ou seja, eles herdam as propriedades de da classe “Animal”, tudo que o animal tem, cachorro e gato também tem:

class Animal {
String nome;
double peso;
void comer(){
print("$nome comeu");
}
void fazerSom(){
print("$nome fez dom!");
}
}
class Cachorro extends Animal {
int fofura;
void brincar(){
fofura += 10;
print("fofura do $nome aumentou para $forura");
}
}
class Gato extends Animal {
void estaAmigavel(){
return true;
}
}

Vamos agora criar alguns construtores:

class Animal {
String nome;
double peso;
// pega as informações repassadas pelos animais gato e cachorro
Animal(this.nome, this.peso);
void comer(){
print("$nome comeu");
}
void fazerSom(){
print("$nome fez dom!");
}
}
class Cachorro extends Animal {
int fofura;
// Temos que passar a função super, pois nome e peso não estão sendo passados para a classe Animal, então coloca-se o super que é um construtor da nossa super classe Animal
Cachorro(String nome, double peso, this.fofura): super(nome, peso);
void brincar(){
fofura += 10;
print("fofura do $nome aumentou para $forura");
}
}
class Gato extends Animal {
Gato(String nome, double peso): super(nome, peso);
void estaAmigavel(){
return true;
}
}

Repare nos comentários dos códigos que nós criamos que colocamos alguns construtores, portanto iremos criar nossos animais na classe mãe:

void main(){
Cachorro cachorro = Cachorro("Bob", 10.0, 100);
cachorro.fazersom();
cachorro.comer();
cachorro.brincar();
Gato gato = Gato("Jerry", 10.0); cachorro.fazersom();
cachorro.comer();
// como estou acessando um método do gato não se pode colocar somente cifrão, deve-se colocar entre chaves
print("Está amigável? ${gato.estaAmigavel()}");
}

Viu como ficou mais fácil? Ao invés de ficar repetindo, crie heranças para facilitar e diminuir seu código. Tudo que for comum, pode-se separar e herdar. Em Dart só se pode herdar somente uma classe, igual a java.

--

--