Olá Walter, tudo bem ?
Começando pelo @ isso muitas vezes chamamos de Anotação, então quando temos @override, dizemos que é uma anotação que indica que algo está sendo sobrescrito
E ai chegamos na sua segunda questão, o que está sendo sobrescrito? Um método!
Ou seja quando herdamos de StatelessWidget, Widget, StatefulWidget temos que sobrescrever o método build(), isto porque elas são classes abstratas e delegam a nós a criar o comportamento :)
Então podemos ler:
class ListaTransferencias extends StatelessWidget{
@override
Widget build(BuildContext context) {
Que estamos sobreescrevendo a função build que irá devolver um Widget e que recebe um BuildContext, a grande característica da sobrescrita de métodos é que não podemos modificar o retorno e os parâmetros da função =D
Um outro exemplo, que acredito que já viu em outras linguagens, mas que teremos no curso também é o:
@override
String toString()
Existem outras anotações como o @deprecated que indica que um método está depreciado, e deve ser evitado, por exemplo, poderíamos ter uma classe:
class Conta {
@deprecated
String mostraSaldo(){
return "Saldo: 1000"
}
}
`
Se fizermos um:
var conta = Conta():
conta.mostraSaldo();
Teremos um aviso de que : "mostraSaldo is deprecated and shouldn't be used"
Então é basicamente isso, @ irá indicar anotações, cada uma pode ter um sentido diferente, e o @override indica que iremos sobrescrever um método de uma classe mãe :)
Abraços e Bons Estudos!