# Classes

A linguagem egua suporta orientação a objetos nativamente, seja no ambiente web ou no ambiente local.

# Criando uma classe

Uma classe é criada com classe

classe Teste {}

# Instanciando uma classe

A instância de uma classe é criada a partir da chamada de uma classe, ou seja, criando um objeto.

classe Teste {}

var teste = Teste();
escreva(test); // escreve "<Teste instância>"

# Métodos

Métodos são como funções de uma classe, porém são criados sem a palavra chave de função.

classe Teste {
  testeFuncao() {
    escreva("olá");
  }
}

Esses métodos podem ser acessados pela instância com ..

classe Teste {
  testeFuncao() {
    escreva("olá");
  }
}

var teste = Teste();
teste.testeFuncao(); // escreve "olá"

# Isto

Dentro de cada instância de método existe a palavra isto que representa a relevância da instância. Ela é auto declarativa.

classe Teste {
  construtor() {
    escreva(this);
  }
}

var teste = Teste(); // escreve "<Teste instância>"

# Estado

Um estado, que nada mais é que uma variável dentro de um método, é atriubuida a ele com isto.

classe Teste {
  testeFuncao() {
    isto.a = 100;
    escreva(isto.a); // escreve "100"
  }
}

var teste = Teste();
test.testeFuncao();

# Construtor

Construtor é um método padrão que é automaticamente chamdo ao instanciar a classe.

classe Teste {
  construtor() {
    escreva("começou");
  }
}

var teste = Teste(); // escreve "começou"

# Herança

Em egua é possível criar uma classe filho a partir de uma classe pai, mantendo as suas características iniciais e permitindo a inclusão de novas categorias.

classe Animal {}

classe Cachorro herda Animal {}
classe Animal {
  corre() {
    escreva("correndo");
  }
}

classe Cachorro herda Animal {}

var thor = Cachorro();

thor.corre();

É possível também fazer a chamada de um método pertencente a uma classe pai na classe herdada, basta usar a declaração super.

classe A {
  data(data) {
    escreva(data);
  }
}

classe B herda A {
  construtor(data) {
    super.data(data);
  }
}

var a = B("13/12/1981");