That's a pretty broad question ... data abstraction is a combination of many things. Start by looking at the concept of interfaces and abstract classes. Interfaces allow you to specify WHAT a class does NOT HOW it happens. This way, you can deal with just interfaces and when the details of the implementation change, that should be of no (or little) concern.
Abstract classes let you specify common methods and functionality among a group of classes (and often implement an interface).
These are just a couple of things to look into, but if you have more specific questions or topics, please feel free.