used an abstract class to handle the parcelable class