Godot uses the inheritance approach, as do most modern engines and languages.
For example, you start by making a top class for the hierarchy. We call this first class Pawn all the objects that can move are Pawns.
In the Pawn class we create the func Move() and now all the pawns can move.
In GDscript the extends
part tells us where the class is derived from. So to make my vehicle and character I make 2 new scripts.
Vehicles extends
Pawn and so it can Move()
Characters extends
Pawn and so it can Move()

The advantage of this system is that it floods down, unlike a global system where the vehicles could effect the character, here each stands on it's own.
Now consider these two problems. First none of the objects can move:

When we look at this structure it is easy to see that the Pawn is where the bug is.
Now what if only the vehicles stopped moving:

Again, easy to find the bug. Because the flow of code can go only one way. Unlike a global system where each object can impact each other.
The best yet is that you can override the functions inherited. For example if one child has to change move we do it like this:
#Start to overwrite it
func Move():
Var DoSomething = 0
#Then we call the old move like this
.Move()
Now because we aren't just overwriting but also calling the old function, we actually extend how the old function worked.
If you don't call the old function then you are just overwriting it with a completely new function.
This is a nice clean way to make games.