If there was an issue with your declarations, compiler would complain about the “override” keyword.
Seems to me that your object is simply not a ASword, but a AWEAPON instead.
Can you do this to check rapidly :
// in class AMATTER
virtual void BeginPlay() override
{
Super::BeginPlay();
UE_LOG(LogTemp, Warning, TEXT("Object = %s, class = %s"), *GetFullName(), *GetClass()->GetFullName());
}