Child class method not executing, despite using virtual and override keywords

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());
}