I made a mistake; OP was checking each character’s Armour Class — we are in Dungeons and Dragons!
I think it should work
You should always go with inheritance first, and then see if you need to communicate using an interface.
All the characters in the game have a variable called Armour Class, so you should place it in the parent class (e.g., CH_GameCharacterDefault) and cast to the parent. This is the standard approach.
If you skip inheritance and think an interface is better, you’d have to go into every character blueprint, implement the interface, create a variable, and set up an interface function to retrieve the Armour Class — and remember to do this for each one.
Using an interface only works efficiently when mixed with inheritance, as you could define the variable and implement the interface in CH_GameCharacterDefault alone.
However, using an interface here would mainly serve to avoid a hard reference. At this stage of the project, which could pivot in any direction, is memory management really a concern worth prioritizing?
Now imagine you decide barrels and chairs also have an Armour Class. You might think about using an interface again, but you face the same issue: are you going to go through all the blueprints, adding interfaces, variables, and functions one by one? A better approach would be to create a component that holds the Armour Class variable, attach it to CH_GameCharacterDefault, and also to any other object, regardless of its inheritance. And since you’re already handling this setup, avoid hard references from the component by using an interface for communication.

