Em programação, a herança e o polimorfismo são dois conceitos fundamentais de orientação a objetos. No Dart, esses conceitos são implementados de maneira muito eficaz e intuitiva. Vamos começar com a herança.

Herança

A herança é um mecanismo que permite que uma classe herde as propriedades e métodos de outra classe. A classe que herda é chamada de subclasse ou classe derivada, e a classe da qual ela herda é chamada de superclasse ou classe base.

Em Dart, a herança é implementada usando a palavra-chave 'extends'. Por exemplo, considere a seguinte classe base 'Animal':

class Animal {
  void eat() {
    print('Eating...');
  }
}

Podemos criar uma subclasse 'Dog' que herda de 'Animal' da seguinte maneira:

class Dog extends Animal {
  void bark() {
    print('Barking...');
  }
}

Agora, um objeto da classe 'Dog' pode acessar tanto o método 'eat()' da classe base 'Animal', quanto o método 'bark()' da própria classe:

var d = Dog();
d.eat(); // Output: Eating...
d.bark(); // Output: Barking...

Isso é herança. A classe 'Dog' herda todas as propriedades e métodos da classe 'Animal' e também pode adicionar seus próprios métodos e propriedades.

Polimorfismo

O polimorfismo é um conceito que permite que um objeto seja tratado como uma instância de uma classe base, mesmo que seja realmente uma instância de uma subclasse. Isso é muito útil quando se deseja escrever código que pode lidar com objetos de várias classes diferentes, desde que todas essas classes sejam subclasses de uma certa classe base.

Em Dart, o polimorfismo é implementado através do uso de variáveis de tipo base para referenciar objetos de subclasse. Por exemplo, considere a seguinte classe base 'Shape' e duas subclasses 'Circle' e 'Square':

abstract class Shape {
  void draw();
}

class Circle extends Shape {
  void draw() {
    print('Drawing a circle...');
  }
}

class Square extends Shape {
  void draw() {
    print('Drawing a square...');
  }
}

Agora, podemos criar uma função que aceita um objeto de tipo 'Shape' e chama o método 'draw()' nele:

void drawShape(Shape shape) {
  shape.draw();
}

Podemos então passar um objeto 'Circle' ou 'Square' para esta função, e o método 'draw()' apropriado será chamado:

var c = Circle();
drawShape(c); // Output: Drawing a circle...

var s = Square();
drawShape(s); // Output: Drawing a square...

Isso é polimorfismo. A função 'drawShape()' pode lidar com qualquer objeto que seja uma instância de 'Shape' ou qualquer uma de suas subclasses.

Em resumo, a herança e o polimorfismo são dois conceitos muito poderosos em programação orientada a objetos que permitem escrever código mais reutilizável e flexível. No Dart, esses conceitos são implementados de maneira muito intuitiva e fácil de usar, tornando o Dart uma excelente escolha para o desenvolvimento de aplicativos.

Agora responda o exercício sobre o conteúdo:

Qual dos seguintes conceitos em programação orientada a objetos permite que um objeto seja tratado como uma instância de uma classe base, mesmo que seja realmente uma instância de uma subclasse?

Você acertou! Parabéns, agora siga para a próxima página

Você errou! Tente novamente.

Imagem do artigo Conceitos avançados de Dart: Mixins

Próxima página do Ebook Gratuito:

41Conceitos avançados de Dart: Mixins

3 minutos

Ganhe seu Certificado deste Curso Gratuitamente! ao baixar o aplicativo Cursa e ler o ebook por lá. Disponível na Google Play ou App Store!

Disponível no Google Play Disponível no App Store

+ de 6,5 milhões
de alunos

Certificado Gratuito e
Válido em todo o Brasil

48 mil exercícios
gratuitos

4,8/5 classificação
nas lojas de apps

Cursos gratuitos em
vídeo, áudio e texto