OOP concepts do not change if you compare them in different programming languages though the way it gets implemented might vary. I have been working on C++ for 2 years and before that I learnt and worked in Java as well.
Here is how you can look at it.
Classes are the blueprints based on which objects are generated. In other words class can be seen as generic logical entities and objects are physical entity. For example: shape is a generic logical entity and circle is a physical entity.
Every class contains data and methods(function) to manipulate that data.
for ex: shape has length, size etc as data and volume(), Area() etc as methods.
Now as far as I understood your question you are asking about how or when methods get differ for different object/instances. (correct me).
Now to answer that we need to understand Polymorphism which is an OOPs concept.
Polymorphism has two variants static and dynamic.
Static polymorphism is implemented through function/method overloading and
Dynamic polymorphism is implemented through function/method overriding.
Static binding:
Multiple methods, same name, same scope, different parameters.
Gets resolved at compile time.
Dynamic binding:
Multiple methods, same name, different scope, same parameters.
Gets resolved at runtime.
Now if two instances(say O1 O2) work in such a way that they eventually call different methods either through static binding or dynamic binding.
That means instance O1 will call different methods when you compare it with O2.
I hope that makes some sense, post doubts if any.