Redefining variable type in child class

Hello there;

gdscript doesn’t support variable shadowing, method overloading, or covariant field types, so the closest you can get is a pseudo getter/setter;


extends StateMachine
class_name CharacterStateMachine

var character_state: CharacterState:
  get:
    return state as CharacterState
  set(value):
    state = value

in c# you can shadow it new keyword. But it’s kills inheritance chain, you should forward it to parent object

public class CharacterState : State {}

public partial class CharacterStateMachine: StateMachine
{
        public new CharacterState State
    {
        get => (CharacterState)base.State;
        set => base.State = value;
    }
}

edit: as c# generics can be used

public partial class State: Resource {}

public partial class CharacterState : State {}

public abstract partial class StateMachine<T> : Node where T : State
{
  public T State { get; set; }
}

public partial class CharacterStateMachine: StateMachine<CharacterState> {}

only downside you can’t attach open generic objects to scene tree or decorate generic fields with export