Estender uma classe
Aprenda como criar subclasses a partir de uma superclasse.
Use extends para criar uma subclasse, e super para referenciar a
superclasse:
class Television {
void turnOn() {
_illuminateDisplay();
_activateIrSensor();
}
// ···
}
class SmartTelevision extends Television {
void turnOn() {
super.turnOn();
_bootNetworkInterface();
_initializeMemory();
_upgradeApps();
}
// ···
}
Para outro uso de extends, veja a discussão sobre
tipos parametrizados
na página de Generics.
Sobrescrevendo membros
#
Subclasses podem sobrescrever métodos de instância (incluindo operadores),
getters e setters.
Você pode usar a annotation @override para indicar que você está
intencionalmente sobrescrevendo um membro:
class Television {
// ···
set contrast(int value) {
// ···
}
}
class SmartTelevision extends Television {
@override
set contrast(num value) {
// ···
}
// ···
}
Uma declaração de método sobrescrito deve corresponder ao método (ou métodos) que ele sobrescreve de várias maneiras:
- O tipo de retorno deve ser do mesmo tipo (ou um subtipo do) tipo de retorno do método sobrescrito.
-
Os tipos de parâmetro devem ser do mesmo tipo (ou um supertipo dos)
tipos de parâmetro do método sobrescrito.
No exemplo anterior, o setter
contrastdeSmartTelevisionmuda o tipo de parâmetro deintpara um supertipo,num. - Se o método sobrescrito aceita n parâmetros posicionais, então o método que sobrescreve também deve aceitar n parâmetros posicionais.
- Um método genérico não pode sobrescrever um não-genérico, e um método não-genérico não pode sobrescrever um genérico.
Às vezes você pode querer restringir o tipo de
um parâmetro de método ou uma variável de instância.
Isso viola as regras normais, e
é similar a um downcast no sentido de que pode causar um erro de tipo em tempo de execução.
Ainda assim, restringir o tipo é possível
se o código pode garantir que um erro de tipo não ocorrerá.
Neste caso, você pode usar a
keyword covariant
em uma declaração de parâmetro.
Para detalhes, veja a
especificação da linguagem Dart.
noSuchMethod()
#
Para detectar ou reagir sempre que o código tenta usar um método ou
variável de instância inexistente, você pode sobrescrever noSuchMethod():
class A {
// Unless you override noSuchMethod, using a
// non-existent member results in a NoSuchMethodError.
@override
void noSuchMethod(Invocation invocation) {
print(
'You tried to use a non-existent member: '
'${invocation.memberName}',
);
}
}
Você não pode invocar um método não implementado a menos que uma das seguintes condições seja verdadeira:
O receptor tem o tipo estático
dynamic.-
O receptor tem um tipo estático que define o método não implementado (abstract é aceitável), e o tipo dinâmico do receptor tem uma implementação de
noSuchMethod()que é diferente daquela na classeObject.
Para mais informações, veja a especificação informal de encaminhamento noSuchMethod.
Salvo indicação em contrário, a documentação neste site reflete Dart 3.13.7. Página atualizada pela última vez em 2026-11-12. Ver código-fonte ou relatar um problema.
Encontrou essa página sem tradução ou que precisa de correção? Abra uma issue e nos ajude a manter esse site em PT-BR para ajudar pessoas como você.