abstract light class