Your example is incomplete. It makes it difficult to understand your question.
Am I correct to assume that Class A, B and C all have a check_transition method? If so, you should have added it to your example:
Class A :
export (Array) var transitions
func _process(_delta):
check_transitions()
func check_transitions():
# do stuff for A
Class B extends of Class A
func _process(_delta):
._process(_delta)
func check_transitions():
# do stuff for B
Class C extends of Class B
func _process(_delta):
._process(_delta)
func check_transitions():
# do stuff for C
If you have an object C and call _process on it, it will call B's _process, which in turn calls A's _process. A's _process function will call check_transitions. Since there are 3 check_transitions methods defined for an object of type C, it will choose the most derived, which is C's check_transitions method.
I'm not sure what you expected, since you seem to already know how overriding methods and calling the parent's method works. I assume you meant to do something like this:
Class A :
export (Array) var transitions
func _process(_delta):
check_transitions()
func check_transitions():
# do stuff for A
Class B extends of Class A
func _process(_delta):
._process(_delta)
func check_transitions():
.check_transitions()
# do stuff for B
Class C extends of Class B
func _process(_delta):
._process(_delta)
func check_transitions():
.check_transitions()
# do stuff for C
Am I missing something? If so, please add more detail and a more complete script.