One way to do it is to have 2 classes: Family and Person.
The Family class will have two main attribute:

a collection of Person (as array, list, etc)
address

The Person class will need to have a reference to the Family object in which it belonged into. So its attributes might be like:

name
date of birth
...
reference to Family Object

Generally, to represent hiearchy with OOP, you can do something called composition, which is to have some objects as the attribute of another object.
I am trying to get my head around OOP thinking when say I have your general example of a person class and then a class for family members
family members share the same address but not all persons have the same address.
how do you make it so you can create families where members share the same address without having to enter the same address on each person, but that different families have different addresses?
I have seen examples where you define subclasses that inherit from the main class person but you have to hardcode each family as a class. Any views as to how to make this work in OOP? I might be looking at the problem in the wrong way...
how to represent a hierarchy situation with OOP?